<?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>44727</bug_id>
          
          <creation_ts>2010-08-26 15:47:18 -0700</creation_ts>
          <short_desc>[chromium] Add support for non-text/non-URL types in event.dataTransfer</short_desc>
          <delta_ts>2012-05-02 21:54:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>42121</dependson>
    
    <dependson>44914</dependson>
    
    <dependson>44917</dependson>
    
    <dependson>44992</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Daniel Cheng">dcheng</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>270169</commentid>
    <comment_count>0</comment_count>
      <attachid>65634</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-26 15:47:18 -0700</bug_when>
    <thetext>Created attachment 65634
Preliminary patch for reference

This is the WebKit patch to add that support. http://crbug.com/31037 is for the Chromium changes. I&apos;m currently uncertain of how to split up the change nicely; right now, it requires a simultaneous commit against the WebKit and Chromium repositories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271735</commentid>
    <comment_count>1</comment_count>
      <attachid>65977</attachid>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-30 16:26:12 -0700</bug_when>
    <thetext>Created attachment 65977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271742</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2010-08-30 16:30:25 -0700</bug_when>
    <thetext>The associated Chromium-side patch is at http://codereview.chromium.org/2868069/show. 
The Windows side for the Chromium patch is more or less complete (ClipboardWin::WriteData does need to be updated though). I am working on merging in the changes I&apos;ve made to the Mac/Linux side.

I&apos;m currently not sure how to land this patch once it gets past review; there&apos;s some dependencies from the browser on renderer side changes, and vise versa. There&apos;s also what (I suspect) is a layering violation in the EventSender/WebViewHost changes, so any suggestions on how to resolve that would be welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271793</commentid>
    <comment_count>3</comment_count>
      <attachid>65977</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-08-30 17:25:12 -0700</bug_when>
    <thetext>Comment on attachment 65977
Patch

dcheng and I discussed various ways to break this patch into smaller pieces.  r- for now, since this is pretty much unreviewable and not landable anyway (it would break chromium since it&apos;s an api change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614017</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-01 23:15:52 -0700</bug_when>
    <thetext>Does this bug still exist?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614493</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Cheng">dcheng</who>
    <bug_when>2012-05-02 11:51:46 -0700</bug_when>
    <thetext>The various bits that this involves have landed and been in tree for some time now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614984</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-05-02 21:54:10 -0700</bug_when>
    <thetext>Excellent!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65634</attachid>
            <date>2010-08-26 15:47:18 -0700</date>
            <delta_ts>2010-08-30 16:26:08 -0700</delta_ts>
            <desc>Preliminary patch for reference</desc>
            <filename>prelim.patch</filename>
            <type>text/plain</type>
            <size>73829</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
aW5kZXggZDkwNjM4NS4uOWMwYThkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxMzAsNyArMjEzMCw2IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2NmL1NoYXJlZEJ1ZmZlckNGLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1CcmlkZ2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1EYXRhT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJk
Q2hyb21pdW0uaCcsCkBAIC0yMTc0LDYgKzIxNzMsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hy
b21pdW0vUG9wdXBNZW51UHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9SZWFkYWJsZURhdGFPYmplY3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0v
U1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKQEAgLTIxOTQsNiArMjE5NSw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9jaHJv
bWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAKaW5kZXggN2ExM2IxMi4uZWQ0Y2YzNiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcAorKysgYi9XZWJD
b3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCkBAIC0zOSw3ICszOSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+IEVkaXRvcjo6bmV3
R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJh
bWUpCiB7Ci0gICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoZmFsc2UsIENocm9t
aXVtRGF0YU9iamVjdDo6Y3JlYXRlKCksIHBvbGljeSwgZnJhbWUpOworICAgIHJldHVybiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKGZhbHNlLCBwb2xpY3ksIGZyYW1lKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50
SGFuZGxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9FdmVudEhhbmRsZXJD
aHJvbWl1bS5jcHAKaW5kZXggNzE5MTYzZi4uN2EzODBmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
YWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BhZ2Uv
Y2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBAIC0xMjgsOCArMTI4LDcgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGV2ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5kbGVyOjpj
cmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPENocm9taXVtRGF0
YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
cmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZGF0YU9iamVjdC5nZXQoKSwg
Q2xpcGJvYXJkV3JpdGFibGUsIG1fZnJhbWUpOworICAgIHJldHVybiBDbGlwYm9hcmRDaHJvbWl1
bTo6Y3JlYXRlKHRydWUsIENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lKTsKIH0KIAogdm9pZCBF
dmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1CcmlkZ2UuaAppbmRleCBmYzEzNDVlLi5jM2Y4OTAwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCkBAIC0xMDAsNyArMTAwLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZVBsYWlu
VGV4dChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVV
UkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBzdGF0aWMgdm9pZCBjbGlw
Ym9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5n
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlRGF0YShDbGlwYm9hcmREYXRh
Kik7CisgICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBtZXRhZGF0YSk7CiAKICAg
ICAgICAgLy8gSW50ZXJmYWNlIGZvciBoYW5kbGluZyBjb3B5IGFuZCBwYXN0ZSwgZHJhZyBhbmQg
ZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5LgogICAgICAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+
IGNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
QnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcyk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDgzNTI2NjkuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIAotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBDaHJvbWl1bURhdGFPYmplY3Q6OmNsZWFy
KCkKLXsKLSAgICBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgZmlsZW5hbWVzLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgQ2hyb21pdW1EYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2VwdEZpbGVzKCkKLXsK
LSAgICB1cmwgPSBLVVJMKCk7Ci0gICAgdXJsVGl0bGUgPSAiIjsKLSAgICB1cmlMaXN0LmNsZWFy
KCk7Ci0gICAgZG93bmxvYWRNZXRhZGF0YSA9ICIiOwotICAgIGZpbGVFeHRlbnNpb24gPSAiIjsK
LSAgICBwbGFpblRleHQgPSAiIjsKLSAgICB0ZXh0SHRtbCA9ICIiOwotICAgIGh0bWxCYXNlVXJs
ID0gS1VSTCgpOwotICAgIGZpbGVDb250ZW50RmlsZW5hbWUgPSAiIjsKLSAgICBpZiAoZmlsZUNv
bnRlbnQpCi0gICAgICAgIGZpbGVDb250ZW50LT5jbGVhcigpOwotfQotCi1ib29sIENocm9taXVt
RGF0YU9iamVjdDo6aGFzRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICF1cmwuaXNFbXB0eSgp
Ci0gICAgICAgIHx8ICF1cmlMaXN0LmlzRW1wdHkoKQotICAgICAgICB8fCAhZG93bmxvYWRNZXRh
ZGF0YS5pc0VtcHR5KCkKLSAgICAgICAgfHwgIWZpbGVFeHRlbnNpb24uaXNFbXB0eSgpCi0gICAg
ICAgIHx8ICFmaWxlbmFtZXMuaXNFbXB0eSgpCi0gICAgICAgIHx8ICFwbGFpblRleHQuaXNFbXB0
eSgpCi0gICAgICAgIHx8ICF0ZXh0SHRtbC5pc0VtcHR5KCkKLSAgICAgICAgfHwgZmlsZUNvbnRl
bnQ7Ci19Ci0KLUNocm9taXVtRGF0YU9iamVjdDo6Q2hyb21pdW1EYXRhT2JqZWN0KGNvbnN0IENo
cm9taXVtRGF0YU9iamVjdCYgb3RoZXIpCi0gICAgOiBSZWZDb3VudGVkPENocm9taXVtRGF0YU9i
amVjdD4oKQotICAgICwgdXJsVGl0bGUob3RoZXIudXJsVGl0bGUpCi0gICAgLCBkb3dubG9hZE1l
dGFkYXRhKG90aGVyLmRvd25sb2FkTWV0YWRhdGEpCi0gICAgLCBmaWxlRXh0ZW5zaW9uKG90aGVy
LmZpbGVFeHRlbnNpb24pCi0gICAgLCBmaWxlbmFtZXMob3RoZXIuZmlsZW5hbWVzKQotICAgICwg
cGxhaW5UZXh0KG90aGVyLnBsYWluVGV4dCkKLSAgICAsIHRleHRIdG1sKG90aGVyLnRleHRIdG1s
KQotICAgICwgaHRtbEJhc2VVcmwob3RoZXIuaHRtbEJhc2VVcmwpCi0gICAgLCBmaWxlQ29udGVu
dEZpbGVuYW1lKG90aGVyLmZpbGVDb250ZW50RmlsZW5hbWUpCi0gICAgLCB1cmwob3RoZXIudXJs
KQotICAgICwgdXJpTGlzdChvdGhlci51cmlMaXN0KQotewotICAgIGlmIChvdGhlci5maWxlQ29u
dGVudC5nZXQoKSkKLSAgICAgICAgZmlsZUNvbnRlbnQgPSBvdGhlci5maWxlQ29udGVudC0+Y29w
eSgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaAppbmRleCBhZjBhM2ZhLi43MTIyNGEwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKQEAgLTM0
LDggKzM0LDExIEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDcwICs0NywzNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgLy8gb2YgYW5kIGlzIG5vdCBzcGVjaWZpYyB0byBhIHBsYXRmb3JtLgogICAgIGNs
YXNzIENocm9taXVtRGF0YU9iamVjdCA6IHB1YmxpYyBSZWZDb3VudGVkPENocm9taXVtRGF0YU9i
amVjdD4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2hyb21pdW1E
YXRhT2JqZWN0PiBjcmVhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IENocm9taXVtRGF0YU9iamVjdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXNzUmVm
UHRyPENocm9taXVtRGF0YU9iamVjdD4gY29weSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRhT2JqZWN0KCp0aGlzKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0gICAgICAgIHZvaWQgY2xlYXJBbGxFeGNl
cHRGaWxlcygpOwotICAgICAgICBib29sIGhhc0RhdGEoKSBjb25zdDsKLQotICAgICAgICB2b2lk
IGNsZWFyVVJMKCkKLSAgICAgICAgewotICAgICAgICAgICAgdXJsID0gS1VSTCgpOwotICAgICAg
ICAgICAgdXJpTGlzdC5jbGVhcigpOwotICAgICAgICAgICAgdXJsVGl0bGUgPSAiIjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGJvb2wgaGFzVmFsaWRVUkwoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gdXJsLmlzVmFsaWQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEtVUkwg
Z2V0VVJMKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVybDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmIG5ld1VSTCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdXJsID0gbmV3VVJMOwotICAgICAgICAgICAgdXJpTGlzdC5jbGVhcigp
OwotICAgICAgICAgICAgaWYgKG5ld1VSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQobmV3VVJMLnN0cmluZygpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFN0cmluZyB1cmxUaXRsZTsKLQotICAgICAgICBTdHJpbmcgZG93bmxv
YWRNZXRhZGF0YTsKLQotICAgICAgICBTdHJpbmcgZmlsZUV4dGVuc2lvbjsKLSAgICAgICAgVmVj
dG9yPFN0cmluZz4gZmlsZW5hbWVzOwotCi0gICAgICAgIFN0cmluZyBwbGFpblRleHQ7Ci0KLSAg
ICAgICAgU3RyaW5nIHRleHRIdG1sOwotICAgICAgICBLVVJMIGh0bWxCYXNlVXJsOwotCi0gICAg
ICAgIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBmaWxlQ29udGVudDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFVSTCBhbmQgdXJp
LWxpc3QgYXJlIGxpbmtlZCwgc28gdGhleSBzaG91bGQgbm90IGJlIGFjY2Vzc2VkIGluZGl2aWR1
YWxseS4KLSAgICAgICAgS1VSTCB1cmw7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IHVyaUxpc3Q7
Ci0KLSAgICAgICAgQ2hyb21pdW1EYXRhT2JqZWN0KCkge30KLSAgICAgICAgQ2hyb21pdW1EYXRh
T2JqZWN0KGNvbnN0IENocm9taXVtRGF0YU9iamVjdCYpOwotCi0gICAgICAgIGZyaWVuZCBjbGFz
cyBDbGlwYm9hcmRDaHJvbWl1bTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRGF0YShjb25z
dCBTdHJpbmcmIHR5cGUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRXhjZXB0
RmlsZXMoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKyAgICAgICAg
dmlydHVhbCBib29sIGhhc0RhdGEoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgSGFzaFNl
dDxTdHJpbmc+IHR5cGVzKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdCA9IDA7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKSA9IDA7CisKKyAgICAgICAgLy8gU3BlY2lhbCBhY2Nlc3NvcnMgZm9yIFVSTCBhbmQg
SFRNTCBzaW5jZSB0aGV5IGNhcnJ5IGFkZGl0aW9uYWwKKyAgICAgICAgLy8gbWV0YWRhdGEuCisg
ICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJh
c2VVUkwpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEhUTUwoY29uc3QgU3Ry
aW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKSA9IDA7CisKKyAgICAgICAgdmlydHVhbCBi
b29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBWZWN0b3I8U3Ry
aW5nPiBmaWxlbmFtZXMoKSBjb25zdCA9IDA7CisKKyAgICAgICAgLy8gQWNjZXNzb3JzIHVzZWQg
d2hlbiB0cmFuc2ZlcnJpbmcgZHJhZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorICAg
ICAgICAvLyBicm93c2VyLgorICAgICAgICB2aXJ0dWFsIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
IGRhdGFNYXAoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHVybFRpdGxlKCkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEtVUkwgaHRtbEJhc2VVUkwoKSBjb25zdCA9IDA7
CisKKyAgICAgICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSBy
ZW5kZXJlciB0byB0aGUgYnJvd3Nlci4KKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUV4dGVu
c2lvbigpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUNvbnRlbnRGaWxl
bmFtZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZmlsZUNvbnRlbnQoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxl
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZp
bGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZv
aWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KSA9IDA7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0NsaXBib2FyZENocm9taXVtLmNwcAppbmRleCAwNjI0NGEyLi42NWViMDc4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtNDMsNTcg
KzQzLDUxIEBACiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZWFkYWJsZURhdGFPYmplY3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKICNpbmNsdWRlICJTdHJpbmdCdWlsZGVyLmgiCisjaW5jbHVkZSAiV3JpdGFibGVE
YXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotLy8gV2UgcHJvdmlkZSB0aGUgSUUgY2xp
cGJvYXJkIHR5cGVzIChVUkwgYW5kIFRleHQpLCBhbmQgdGhlIGNsaXBib2FyZCB0eXBlcyBzcGVj
aWZpZWQgaW4gdGhlIFdIQVRXRyBXZWIgQXBwbGljYXRpb25zIDEuMCBkcmFmdAotLy8gc2VlIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvIFNlY3Rpb24g
Ni4zLjUuMwotCi1lbnVtIENsaXBib2FyZERhdGFUeXBlIHsKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZU5vbmUsCi0KLSAgICBDbGlwYm9hcmREYXRhVHlwZVVSTCwKLSAgICBDbGlwYm9hcmREYXRhVHlw
ZVVSSUxpc3QsCi0gICAgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTCwKLSAgICBDbGlwYm9h
cmREYXRhVHlwZVBsYWluVGV4dCwKLSAgICBDbGlwYm9hcmREYXRhVHlwZUhUTUwsCi0KLSAgICBD
bGlwYm9hcmREYXRhVHlwZU90aGVyLAotfTsKLQogLy8gUGVyIFJGQyAyNDgzLCB0aGUgbGluZSBz
ZXBhcmF0b3IgZm9yICJ0ZXh0Ly4uLiIgTUlNRSB0eXBlcyBpcyBDUi1MRi4KIHN0YXRpYyBjaGFy
IGNvbnN0KiBjb25zdCB0ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yID0gIlxyXG4iOwogCi1zdGF0
aWMgQ2xpcGJvYXJkRGF0YVR5cGUgY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUpCitzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KQogewotICAgIFN0cmluZyBjbGVhblR5cGUgPSB0eXBlLnN0cmlwV2hpdGVTcGFjZSgpLmxvd2Vy
KCk7Ci0gICAgaWYgKGNsZWFuVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBDbGlwYm9h
cmREYXRhVHlwZU5vbmU7Ci0KLSAgICAvLyBJbmNsdWRlcyB0d28gc3BlY2lhbCBjYXNlcyBmb3Ig
SUUgY29tcGF0aWJpbGl0eS4KLSAgICBpZiAoY2xlYW5UeXBlID09ICJ0ZXh0IiB8fCBjbGVhblR5
cGUgPT0gInRleHQvcGxhaW4iIHx8IGNsZWFuVHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIp
KQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ7Ci0gICAgaWYgKGNs
ZWFuVHlwZSA9PSAidXJsIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlVVJMOwot
ICAgIGlmIChjbGVhblR5cGUgPT0gInRleHQvdXJpLWxpc3QiKQotICAgICAgICByZXR1cm4gQ2xp
cGJvYXJkRGF0YVR5cGVVUklMaXN0OwotICAgIGlmIChjbGVhblR5cGUgPT0gImRvd25sb2FkdXJs
IikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw7Ci0gICAgaWYg
KGNsZWFuVHlwZSA9PSAidGV4dC9odG1sIikKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFU
eXBlSFRNTDsKLQotICAgIHJldHVybiBDbGlwYm9hcmREYXRhVHlwZU90aGVyOworICAgIGNvbnN0
IFN0cmluZyBub3JtYWxpemVkVHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsK
KyAgICBpZiAobm9ybWFsaXplZFR5cGUgPT0gInRleHQiKQorICAgICAgICByZXR1cm4gInRleHQv
cGxhaW4iOworICAgIGlmIChub3JtYWxpemVkVHlwZSA9PSAidXJsIikKKyAgICAgICAgcmV0dXJu
ICJ0ZXh0L3VyaS1saXN0IjsKKyAgICByZXR1cm4gbm9ybWFsaXplZFR5cGU7Cit9CisKK1Bhc3NS
ZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZSgKKyAgICBDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBmcmFtZSkKK3sKKyAgICBy
ZXR1cm4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRhLCBmcmFtZSk7
Cit9CisKK1Bhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKAor
ICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJh
bWUqIGZyYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0o
dHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpLCBwb2xpY3ksIGZyYW1lKSk7CiB9CiAKLVBh
c3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xp
Y3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBmcmFtZSkKK1Bhc3NSZWZQdHI8
Q2xpcGJvYXJkPiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKAorICAgIGJvb2wgaXNGb3JEcmFn
Z2luZywgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQogewotICAg
IHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKHRydWUsIGRyYWdEYXRhLT5wbGF0Zm9y
bURhdGEoKSwgcG9saWN5LCBmcmFtZSk7CisgICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4g
ZGF0YU9iamVjdDsKKyAgICBpZiAocG9saWN5ID09IENsaXBib2FyZFdyaXRhYmxlIHx8IHBvbGlj
eSA9PSBDbGlwYm9hcmRJbWFnZVdyaXRhYmxlKQorICAgICAgICBkYXRhT2JqZWN0ID0gV3JpdGFi
bGVEYXRhT2JqZWN0OjpjcmVhdGUoaXNGb3JEcmFnZ2luZyk7CisgICAgZWxzZQorICAgICAgICBk
YXRhT2JqZWN0ID0gUmVhZGFibGVEYXRhT2JqZWN0OjpjcmVhdGUoaXNGb3JEcmFnZ2luZyk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdnaW5nLCBk
YXRhT2JqZWN0LCBwb2xpY3ksIGZyYW1lKSk7CiB9CiAKIENsaXBib2FyZENocm9taXVtOjpDbGlw
Ym9hcmRDaHJvbWl1bShib29sIGlzRm9yRHJhZ2dpbmcsCkBAIC0xMDYsNDkgKzEwMCwxNiBAQCBD
bGlwYm9hcmRDaHJvbWl1bTo6Q2xpcGJvYXJkQ2hyb21pdW0oYm9vbCBpc0ZvckRyYWdnaW5nLAog
ewogfQogCi1QYXNzUmVmUHRyPENsaXBib2FyZENocm9taXVtPiBDbGlwYm9hcmRDaHJvbWl1bTo6
Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZywKLSAgICBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9i
amVjdD4gZGF0YU9iamVjdCwgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZy
YW1lKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkQ2hyb21pdW0oaXNGb3JE
cmFnZ2luZywgZGF0YU9iamVjdCwgcG9saWN5LCBmcmFtZSkpOwotfQotCiB2b2lkIENsaXBib2Fy
ZENocm9taXVtOjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChwb2xp
Y3koKSAhPSBDbGlwYm9hcmRXcml0YWJsZSB8fCAhbV9kYXRhT2JqZWN0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2FyZFR5cGVGcm9t
TUlNRVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVOb25lOgotICAgICAgICAvLyBJZiBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMs
IGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBmaWxlIGxpc3QgbXVzdCBiZSBjbGVhcmVkLgotICAgICAg
ICAvLyAoU2VlIEhUTUw1IHNwZWMsICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50
ZXJmYWNlcyIpCi0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOwot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICBtX2RhdGFPYmplY3QtPmNsZWFy
VVJMKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3du
bG9hZFVSTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhID0gIiI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVBsYWlu
VGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSAiIjsKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIG1fZGF0YU9i
amVjdC0+dGV4dEh0bWwgPSAiIjsKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9
IEtVUkwoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90
aGVyOgotICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjb25zdCBTdHJpbmcgY2xlYW5UeXBlID0g
bm9ybWFsaXplVHlwZSh0eXBlKTsKKyAgICBpZiAoY2xlYW5UeXBlLmlzRW1wdHkoKSkKKyAgICAg
IG1fZGF0YU9iamVjdC0+Y2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgIGVsc2UKKyAgICAgIG1f
ZGF0YU9iamVjdC0+Y2xlYXJEYXRhKHR5cGUpOwogfQogCiB2b2lkIENsaXBib2FyZENocm9taXVt
OjpjbGVhckFsbERhdGEoKQpAQCAtMTY1LDg0ICsxMjYsNyBAQCBTdHJpbmcgQ2xpcGJvYXJkQ2hy
b21pdW06OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKSBjb25zdAog
ICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSB8fCAhbV9kYXRhT2JqZWN0KQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlw
ZSA9IGNsaXBib2FyZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlw
ZSkgewotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7Ci0KLSAgICAvLyBIYWNrIGZvciBVUkxzLiBmaWxlIFVSTHMgYXJlIHVzZWQgaW50ZXJu
YWxseSBmb3IgZHJvcCdzIGRlZmF1bHQgYWN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudAotICAgIC8v
IHRvIGV4cG9zZSB0aGVtIHRvIHRoZSBwYWdlLCBzbyB3ZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS4K
LSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdDoKLSAgICAgICAgewotICAgICAgICAg
ICAgU3RyaW5nIHRleHQ7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0
YU9iamVjdC0+dXJpTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgdXJpID0gbV9kYXRhT2JqZWN0LT51cmlMaXN0W2ldOwotICAgICAgICAgICAgICAgIGlm
IChwcm90b2NvbElzKHVyaSwgImZpbGUiKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCF1cmkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh0
ZXh0TUlNRVR5cGVMaW5lU2VwYXJhdG9yKTsKLSAgICAgICAgICAgICAgICAvLyBVUklzIGhhdmUg
YWxyZWFkeSBiZWVuIGNhbm9uaWNhbGl6ZWQsIHNvIGNvcHkgZXZlcnl0aGluZyB2ZXJiYXRpbS4K
LSAgICAgICAgICAgICAgICB0ZXh0LmFwcGVuZCh1cmkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc3VjY2VzcyA9ICF0ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0
OwotICAgICAgICB9Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAgICAgICAv
LyBJbiBjYXNlIG9mIGEgcHJldmlvdXMgc2V0RGF0YSgndGV4dC91cmktbGlzdCcpLCBzZXREYXRh
KCkgaGFzIGFscmVhZHkKLSAgICAgICAgLy8gcHJlcGFyZWQgdGhlICd1cmwnIG1lbWJlciwgc28g
d2UgY2FuIGp1c3QgcmV0cmlldmUgaXQgaGVyZS4KLSAgICAgICAgaWYgKCFtX2RhdGFPYmplY3Qt
PnVybC5pc0VtcHR5KCkgJiYgIW1fZGF0YU9iamVjdC0+dXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAg
ICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVj
dC0+dXJsLnN0cmluZygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDoKLSAgICAgICAgc3VjY2VzcyA9
ICFtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGEuaXNFbXB0eSgpOwotICAgICAgICByZXR1
cm4gbV9kYXRhT2JqZWN0LT5kb3dubG9hZE1ldGFkYXRhOwotICAgIAotICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAgICAgIGlmICghaXNGb3JEcmFnZ2luZygpKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGZvciBhIGRyYWcsIGl0J3MgZm9yIGEgY3V0L3Bh
c3RlIGV2ZW50IGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIG5lZWQg
dG8gY2hlY2sgdGhlIGNsaXBib2FyZC4KLSAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyID0gCi0gICAgICAgICAgICAgICAgUGFzdGVib2FyZDo6Z2Vu
ZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwotICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiAKLSAgICAgICAgICAgICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dCA9
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7Ci0gICAgICAg
ICAgICBzdWNjZXNzID0gIXRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gT3RoZXJ3aXNlIHJldHVybiB3aGF0ZXZlciBpcyBzdG9y
ZWQgaW4gcGxhaW5UZXh0LgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0YU9iamVjdC0+cGxhaW5U
ZXh0LmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0Owot
Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZUhUTUw6Ci0gICAgICAgIGlmICghaXNGb3JEcmFn
Z2luZygpKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzbid0IGZvciBhIGRyYWcsIGl0J3Mg
Zm9yIGEgY3V0L3Bhc3RlIGV2ZW50IGhhbmRsZXIuCi0gICAgICAgICAgICAvLyBJbiB0aGlzIGNh
c2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGNsaXBib2FyZC4KLSAgICAgICAgICAgIFBhc3RlYm9h
cmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyID0gCi0gICAgICAgICAgICAgICAgUGFz
dGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwotICAgICAg
ICAgICAgICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiAKLSAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBT
dHJpbmcgaHRtbFRleHQ7Ci0gICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAg
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNv
dXJjZVVSTCk7Ci0gICAgICAgICAgICBzdWNjZXNzID0gIWh0bWxUZXh0LmlzRW1wdHkoKTsKLSAg
ICAgICAgICAgIHJldHVybiBodG1sVGV4dDsKLSAgICAgICAgfQotICAgICAgICAvLyBPdGhlcndp
c2UgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiB0ZXh0SHRtbC4KLSAgICAgICAgc3VjY2Vz
cyA9ICFtX2RhdGFPYmplY3QtPnRleHRIdG1sLmlzRW1wdHkoKTsKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+dGV4dEh0bWw7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6
Ci0gICAgICAgIC8vIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICByZXR1cm4gbV9kYXRhT2JqZWN0LT5nZXREYXRhKG5vcm1hbGl6ZVR5cGUodHlwZSksIHN1Y2Nl
c3MpOwogfQogCiBib29sIENsaXBib2FyZENocm9taXVtOjpzZXREYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQpAQCAtMjUwLDExMCArMTM0LDE5IEBAIGJvb2wgQ2xp
cGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpCiAgICAgaWYgKHBvbGljeSgpICE9IENsaXBib2FyZFdyaXRhYmxlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBDbGlwYm9hcmREYXRhVHlwZSBkYXRhVHlwZSA9IGNsaXBib2Fy
ZFR5cGVGcm9tTUlNRVR5cGUodHlwZSk7Ci0gICAgc3dpdGNoIChkYXRhVHlwZSkgewotICAgIGNh
c2UgQ2xpcGJvYXJkRGF0YVR5cGVOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
YXNlIENsaXBib2FyZERhdGFUeXBlVVJMOgotICAgICAgICAvLyBGb3Igc2V0RGF0YSgpLCAiVVJM
IiBtdXN0IGJlIHRyZWF0ZWQgYXMgInRleHQvdXJpLWxpc3QiLgotICAgICAgICAvLyAoU2VlIEhU
TUw1IHNwZWMsICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRhVHJhbnNmZXIgaW50ZXJmYWNlcyIpCi0g
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+
dXJsID0gS1VSTCgpOwotICAgICAgICAvLyBMaW5lIHNlcGFyYXRvciBpcyBcclxuIHBlciBSRkMg
MjQ4MyAtIGhvd2V2ZXIsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKLSAgICAgICAgLy8gd2Ug
YWxzbyBhbGxvdyBqdXN0IFxuIGhlcmUuIAotICAgICAgICBkYXRhLnNwbGl0KCdcbicsIG1fZGF0
YU9iamVjdC0+dXJpTGlzdCk7Ci0gICAgICAgIC8vIFN0cmlwIHdoaXRlIHNwYWNlIG9uIGFsbCBs
aW5lcywgaW5jbHVkaW5nIHRyYWlsaW5nIFxyIGZyb20gYWJvdmUgc3BsaXQuCi0gICAgICAgIC8v
IElmIHRoaXMgbGVhdmVzIGEgbGluZSBlbXB0eSwgcmVtb3ZlIGl0IGNvbXBsZXRlbHkuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIEFsc28sIGNvcHkgdGhlIGZpcnN0IHZhbGlkIFVSTCBpbnRvIHRo
ZSAndXJsJyBtZW1iZXIgYXMgd2VsbC4KLSAgICAgICAgLy8gSW4gY2FzZSBubyBlbnRyeSBpcyBh
IHZhbGlkIFVSTCAoaS5lLiwgcmVtYXJrcyBvbmx5KSwgdGhlbiB3ZSBsZWF2ZSAndXJsJyBlbXB0
eS4KLSAgICAgICAgLy8gSS5lLiwgaW4gdGhhdCBjYXNlIHN1YnNlcXVlbnQgY2FsbHMgdG8gZ2V0
RGF0YSgiVVJMIikgd2lsbCBnZXQgYW4gZW1wdHkgc3RyaW5nLgotICAgICAgICAvLyBUaGlzIGlz
IGluIGxpbmUgd2l0aCB0aGUgSFRNTDUgc3BlYyAoc2VlICJUaGUgRHJhZ0V2ZW50IGFuZCBEYXRh
VHJhbnNmZXIgaW50ZXJmYWNlcyIpLgotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZGF0YU9iamVjdC0+dXJpTGlzdC5zaXplKCk7IC8qKi8pIHsKLSAgICAgICAgICAgIFN0cmluZyYg
bGluZSA9IG1fZGF0YU9iamVjdC0+dXJpTGlzdFtpXTsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5l
LnN0cmlwV2hpdGVTcGFjZSgpOwotICAgICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICAgICAgbV9kYXRhT2JqZWN0LT51cmlMaXN0LnJlbW92ZShpKTsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsraTsKLSAgICAg
ICAgICAgIC8vIE9ubHkgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMLgotICAgICAgICAgICAgaWYg
KG1fZGF0YU9iamVjdC0+dXJsLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIC8vIFNraXAgcmVtYXJrcy4KLSAgICAgICAgICAgIGlmIChsaW5lWzBdID09
ICcjJykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEtVUkwgdXJsID0g
S1VSTChQYXJzZWRVUkxTdHJpbmcsIGxpbmUpOwotICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fZGF0YU9iamVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2RhdGFPYmplY3QtPnVybC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgcmV0
dXJuIGRhdGEuaXNFbXB0eSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOgotICAgICAgICBtX2RhdGFPYmpl
Y3QtPmRvd25sb2FkTWV0YWRhdGEgPSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVQbGFpblRleHQ6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+
cGxhaW5UZXh0ID0gZGF0YTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBi
b2FyZERhdGFUeXBlSFRNTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IGRhdGE7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZU90aGVy
OgotICAgICAgICAvLyBOb3QgeWV0IGltcGxlbWVudGVkLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NDEwCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBtX2RhdGFPYmplY3QtPnNldERhdGEobm9ybWFsaXplVHlwZSh0eXBlKSwgZGF0YSk7
CiB9CiAKIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCiBIYXNoU2V0PFN0cmluZz4gQ2xp
cGJvYXJkQ2hyb21pdW06OnR5cGVzKCkgY29uc3QKIHsKLSAgICBIYXNoU2V0PFN0cmluZz4gcmVz
dWx0czsKICAgICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkUmVhZGFibGUgJiYgcG9saWN5KCkg
IT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAg
ICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsKIAogICAgIGlmICghbV9kYXRhT2JqZWN0KQot
ICAgICAgICByZXR1cm4gcmVzdWx0czsKLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT5maWxlbmFt
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHRzLmFkZCgiRmlsZXMiKTsKLQotICAgIC8vIEhh
Y2sgZm9yIFVSTHMuIGZpbGUgVVJMcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBkcm9wJ3MgZGVm
YXVsdCBhY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gZXhwb3NlIHRoZW0gdG8g
dGhlIHBhZ2UsIHNvIHdlIGZpbHRlciB0aGVtIG91dCBoZXJlLgotICAgIGlmIChtX2RhdGFPYmpl
Y3QtPnVybC5pc1ZhbGlkKCkgJiYgIW1fZGF0YU9iamVjdC0+dXJsLmlzTG9jYWxGaWxlKCkpIHsK
LSAgICAgICAgQVNTRVJUKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNFbXB0eSgpKTsKLSAgICAg
ICAgcmVzdWx0cy5hZGQoIlVSTCIpOwotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT51
cmlMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB0aGUgVVJJIGxpc3Qg
Y29udGFpbnMgYXQgbGVhc3Qgb25lIG5vbi1maWxlIFVSTC4KLSAgICAgICAgZm9yIChWZWN0b3I8
U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuYmVnaW4o
KTsKLSAgICAgICAgICAgICBpdCAhPSBtX2RhdGFPYmplY3QtPnVyaUxpc3QuZW5kKCk7ICsraXQp
IHsKLSAgICAgICAgICAgIGlmICghcHJvdG9jb2xJcygqaXQsICJmaWxlIikpIHsKLSAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgVVJJIGxpc3QgaXMgbm90IGVtcHR5LCBp
dCBtYXkgbm90IGFjdHVhbGx5Ci0gICAgICAgICAgICAgICAgLy8gY29udGFpbiBhIHZhbGlkIFVS
TCwgc28gd2UgY2FuJ3QgcmV0dXJuICJVUkwiIGhlcmUuCi0gICAgICAgICAgICAgICAgcmVzdWx0
cy5hZGQoInRleHQvdXJpLWxpc3QiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9kYXRhT2JqZWN0LT5wbGFpblRl
eHQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdHMuYWRkKCJUZXh0Iik7Ci0gICAgICAgIHJl
c3VsdHMuYWRkKCJ0ZXh0L3BsYWluIik7Ci0gICAgfQorICAgICAgICByZXR1cm4gSGFzaFNldDxT
dHJpbmc+KCk7CiAKLSAgICByZXR1cm4gcmVzdWx0czsKKyAgICByZXR1cm4gbV9kYXRhT2JqZWN0
LT50eXBlcygpOwogfQogCiBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRDaHJvbWl1bTo6
ZmlsZXMoKSBjb25zdApAQCAtMzYxLDEzICsxNTQsMTQgQEAgUGFzc1JlZlB0cjxGaWxlTGlzdD4g
Q2xpcGJvYXJkQ2hyb21pdW06OmZpbGVzKCkgY29uc3QKICAgICBpZiAocG9saWN5KCkgIT0gQ2xp
cGJvYXJkUmVhZGFibGUpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKLSAg
ICBpZiAoIW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5KCkp
CisgICAgaWYgKCFtX2RhdGFPYmplY3QgfHwgbV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiBGaWxlTGlzdDo6Y3JlYXRlKCk7CiAKICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIFJlZlB0cjxGaWxlTGlzdD4gZmls
ZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2RhdGFPYmplY3QtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgZmlsZUxpc3QtPmFw
cGVuZChGaWxlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbV9kYXRhT2JqZWN0LT5m
aWxlbmFtZXMuYXQoaSkpKTsKKyAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzID0g
bV9kYXRhT2JqZWN0LT5maWxlbmFtZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
bGVuYW1lcy5zaXplKCk7ICsraSkKKyAgICAgICAgZmlsZUxpc3QtPmFwcGVuZChGaWxlOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgZmlsZW5hbWVzLmF0KGkpKSk7CiAKICAgICByZXR1
cm4gZmlsZUxpc3QucmVsZWFzZSgpOwogfQpAQCAtNDYxLDcgKzI1NSw3IEBAIHN0YXRpYyB2b2lk
IHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBF
bGVtZW50KiBlbGVtCiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXItPnNpemUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGF0YU9iamVjdC0+ZmlsZUNvbnRlbnQgPSBpbWFn
ZUJ1ZmZlcjsKKyAgICBkYXRhT2JqZWN0LT5zZXRGaWxlQ29udGVudChpbWFnZUJ1ZmZlcik7CiAK
ICAgICAvLyBEZXRlcm1pbmUgdGhlIGZpbGVuYW1lIGZvciB0aGUgZmlsZSBjb250ZW50cyBvZiB0
aGUgaW1hZ2UuICBXZSB0cnkgdG8KICAgICAvLyB1c2UgdGhlIGFsdCB0YWcgaWYgb25lIGV4aXN0
cywgb3RoZXJ3aXNlIHdlIGZhbGwgYmFjayBvbiB0aGUgc3VnZ2VzdGVkCkBAIC00NjksMTMgKzI2
MywxMyBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KENocm9taXVtRGF0YU9i
amVjdCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQogICAgIC8vIGluIHRoZSBVUkwuCiAgICAg
U3RyaW5nIGV4dGVuc2lvbiA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lv
bkZvck1JTUVUeXBlKAogICAgICAgICBjYWNoZWRJbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgp
KTsKLSAgICBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uID0gZXh0ZW5zaW9uLmlzRW1wdHkoKSA/
ICIiIDogIi4iICsgZXh0ZW5zaW9uOworICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uID0gZXh0ZW5z
aW9uLmlzRW1wdHkoKSA/ICIiIDogIi4iICsgZXh0ZW5zaW9uOwogICAgIFN0cmluZyB0aXRsZSA9
IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICBpZiAodGl0bGUuaXNFbXB0eSgp
KQogICAgICAgICB0aXRsZSA9IGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLnN1Z2dlc3RlZEZpbGVu
YW1lKCk7CiAKICAgICB0aXRsZSA9IENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZpbGVOYW1l
KHRpdGxlLCBkYXRhT2JqZWN0KTsKLSAgICBkYXRhT2JqZWN0LT5maWxlQ29udGVudEZpbGVuYW1l
ID0gdGl0bGUgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uOworICAgIGRhdGFPYmplY3QtPnNl
dEZpbGVDb250ZW50RmlsZW5hbWUodGl0bGUgKyBmaWxlRXh0ZW5zaW9uKTsKIH0KIAogdm9pZCBD
bGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqIGZyYW1lKQpA
QCAtNDgzLDggKzI3Nyw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1CiAgICAgaWYgKCFtX2Rh
dGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJs
OwotICAgIG1fZGF0YU9iamVjdC0+dXJsVGl0bGUgPSB0aXRsZTsKKyAgICBtX2RhdGFPYmplY3Qt
PnNldFVSTCh1cmwsIHRpdGxlKTsKIAogICAgIC8vIFdyaXRlIHRoZSBieXRlcyBpbiB0aGUgaW1h
Z2UgdG8gdGhlIGZpbGUgZm9ybWF0LgogICAgIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QobV9kYXRh
T2JqZWN0LmdldCgpLCBlbGVtZW50LCB1cmwpOwpAQCAtNDk4LDcgKzI5MSw3IEBAIHZvaWQgQ2xp
cGJvYXJkQ2hyb21pdW06OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBLVVJMJiB1CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFB1dCBpbWcgdGFnIG9u
IHRoZSBjbGlwYm9hcmQgcmVmZXJlbmNpbmcgdGhlIGltYWdlCi0gICAgbV9kYXRhT2JqZWN0LT50
ZXh0SHRtbCA9IGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxlbWVudCk7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXRIVE1MKGltYWdlVG9NYXJrdXAoZnVsbFVSTCwgZWxlbWVudCksIEtVUkwoKSk7CiB9
CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKQpAQCAtNTA2LDE3ICsyOTksMTMgQEAgdm9pZCBDbGlw
Ym9hcmRDaHJvbWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRp
dGxlLCBGcmFtZSopCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAg
ICBBU1NFUlQoIXVybC5pc0VtcHR5KCkpOwotICAgIG1fZGF0YU9iamVjdC0+dXJsID0gdXJsOwot
ICAgIG1fZGF0YU9iamVjdC0+dXJsVGl0bGUgPSB0aXRsZTsKLSAgICBtX2RhdGFPYmplY3QtPnVy
aUxpc3QuY2xlYXIoKTsKLSAgICBtX2RhdGFPYmplY3QtPnVyaUxpc3QuYXBwZW5kKHVybCk7Cisg
ICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CiAKICAgICAvLyBUaGUgVVJMIGNh
biBhbHNvIGJlIHVzZWQgYXMgcGxhaW4gdGV4dC4KLSAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4
dCA9IHVybC5zdHJpbmcoKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldERhdGEoInRleHQvcGxhaW4i
LCB1cmwpOwogCiAgICAgLy8gVGhlIFVSTCBjYW4gYWxzbyBiZSB1c2VkIGFzIGFuIEhUTUwgZnJh
Z21lbnQuCi0gICAgbV9kYXRhT2JqZWN0LT50ZXh0SHRtbCA9IHVybFRvTWFya3VwKHVybCwgdGl0
bGUpOwotICAgIG1fZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSB1cmw7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXRIVE1MKHVybFRvTWFya3VwKHVybCwgdGl0bGUpLCB1cmwpOwogfQogCiB2b2lkIENs
aXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSog
ZnJhbWUpCkBAIC01MjUsMTUgKzMxNCwxNiBAQCB2b2lkIENsaXBib2FyZENocm9taXVtOjp3cml0
ZVJhbmdlKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSogZnJhbWUpCiAgICAgaWYgKCFtX2Rh
dGFPYmplY3QpCiAgICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1s
ID0gY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2Us
IGZhbHNlLCBBYnNvbHV0ZVVSTHMpOwotICAgIG1fZGF0YU9iamVjdC0+aHRtbEJhc2VVcmwgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRIVE1MKAorICAg
ICAgICBjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSwgZmFsc2UsIEFic29sdXRlVVJMcyksCisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KSk7CiAKICAgICBTdHJpbmcgc3RyID0gZnJhbWUtPnNlbGVjdGVkVGV4dCgpOwogI2lmIE9TKFdJ
TkRPV1MpCiAgICAgcmVwbGFjZU5ld2xpbmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7
CiAjZW5kaWYKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwotICAgIG1fZGF0YU9iamVj
dC0+cGxhaW5UZXh0ID0gc3RyOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC9wbGFp
biIsIHN0cik7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCkKQEAgLTU0Niw3ICszMzYsNyBAQCB2b2lkIENsaXBib2FyZENocm9t
aXVtOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgcmVwbGFjZU5ld2xp
bmVzV2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAjZW5kaWYKICAgICByZXBsYWNlTkJT
UFdpdGhTcGFjZShzdHIpOwotICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gc3RyOworICAg
IG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC9wbGFpbiIsIHN0cik7CiB9CiAKIGJvb2wgQ2xp
cGJvYXJkQ2hyb21pdW06Omhhc0RhdGEoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9j
aHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bS5oCmluZGV4IGE0MTUwZDAuLjQ5NDYwZGIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmgKQEAgLTQ1LDggKzQ1LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIH5DbGlwYm9hcmRDaHJv
bWl1bSgpIHt9CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+
IGNyZWF0ZSgKLSAgICAgICAgICAgIGJvb2wgaXNGb3JEcmFnZ2luZywgUGFzc1JlZlB0cjxDaHJv
bWl1bURhdGFPYmplY3Q+LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENsaXBib2FyZD4gY3JlYXRlKAorICAgICAgICAgICAgQ2xpcGJv
YXJkQWNjZXNzUG9saWN5LCBEcmFnRGF0YSosIEZyYW1lKik7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPENsaXBib2FyZD4gY3JlYXRlKAorICAgICAgICAgICAgYm9vbCBpc0ZvckRyYWdnaW5n
LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ksIEZyYW1lKik7CiAKICAgICAgICAgLy8gUmV0dXJucyB0
aGUgZmlsZSBuYW1lIChub3QgaW5jbHVkaW5nIHRoZSBleHRlbnNpb24pLiBUaGlzIHJlbW92ZXMg
YW55CiAgICAgICAgIC8vIGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycyBhcyB3ZWxsIGFz
IG1ha2luZyBzdXJlIHRoZQpAQCAtODAsNyArODIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBD
bGlwYm9hcmRDaHJvbWl1bShib29sLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENs
aXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKKyAgICAgICAgQ2xpcGJvYXJkQ2hyb21pdW0o
Ym9vbCBpc0ZvckRyYWdnaW5nLCBQYXNzUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4sIENsaXBi
b2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAogICAgICAgICB2b2lkIHJlc2V0RnJvbUNsaXBi
b2FyZCgpOwogICAgICAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIE5vZGUqLCBj
b25zdCBJbnRQb2ludCYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9D
bGlwYm9hcmRDaHJvbWl1bVdpbi5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtV2luLmNwcAppbmRleCBiNGEyYzIxLi5kOWJiZWI1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtV2luLmNwcApAQCAtNDQs
MTEgKzQ0LDExIEBAIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZShj
b25zdCBTdHJpbmcmIHRpdGxlLCBDaHJvbWl1bURhdGFPYmplCiB7CiAgICAgLy8gUmVtb3ZlIGFu
eSBpbnZhbGlkIGZpbGUgc3lzdGVtIGNoYXJhY3RlcnMuCiAgICAgU3RyaW5nIHJlc3VsdCA9IHRp
dGxlLnJlbW92ZUNoYXJhY3RlcnMoJmlzSW52YWxpZEZpbGVDaGFyYWN0ZXIpOwotICAgIGlmIChy
ZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+
PSBNQVhfUEFUSCkgewotICAgICAgICBpZiAoZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbi5sZW5n
dGgoKSArIDEgPj0gTUFYX1BBVEgpCi0gICAgICAgICAgICBkYXRhT2JqZWN0LT5maWxlRXh0ZW5z
aW9uID0gIiI7Ci0gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkgKyBkYXRhT2JqZWN0LT5maWxl
RXh0ZW5zaW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKLSAgICAgICAgICAgIHJlc3VsdCA9
IHJlc3VsdC5zdWJzdHJpbmcoMCwgTUFYX1BBVEggLSBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9u
Lmxlbmd0aCgpIC0gMSk7CisgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZp
bGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpIHsKKyAgICAgICAgaWYgKGRh
dGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEgPj0gTUFYX1BBVEgpCisgICAg
ICAgICAgICBkYXRhT2JqZWN0LT5zZXRGaWxlRXh0ZW5zaW9uKCIiKTsKKyAgICAgICAgaWYgKHJl
c3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24oKS5sZW5ndGgoKSArIDEg
Pj0gTUFYX1BBVEgpCisgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIE1B
WF9QQVRIIC0gZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpIC0gMSk7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
cmFnRGF0YUNocm9taXVtLmNwcAppbmRleCA2NzRkMzRkLi5mMmM0MTUwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAgLTQzLDUwICs0Myw1
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIGNvbnRhaW5zSFRNTChjb25z
dCBDaHJvbWl1bURhdGFPYmplY3QqIGRyb3BEYXRhKQogewotICAgIHJldHVybiBkcm9wRGF0YS0+
dGV4dEh0bWwubGVuZ3RoKCkgPiAwOworICAgIHJldHVybiBkcm9wRGF0YS0+dHlwZXMoKS5jb250
YWlucygidGV4dC9odG1sIik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKEZpbGVu
YW1lQ29udmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSkgY29uc3QKIHsKLSAgICByZXR1cm4g
IWFzVVJMKGZpbGVuYW1lUG9saWN5KS5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+dHlwZXMoKS5jb250YWlucygidGV4dC91cmktbGlzdCIpCisgICAgICAgIHx8IChm
aWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzICYmIG1fcGxhdGZvcm1EcmFnRGF0YS0+
aGFzRmlsZW5hbWVzKCkpOwogfQogCiBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZpbGVuYW1lQ29u
dmVyc2lvblBvbGljeSBmaWxlbmFtZVBvbGljeSwgU3RyaW5nKiB0aXRsZSkgY29uc3QKIHsKLSAg
ICBTdHJpbmcgdXJsOwotICAgIGlmIChtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1ZhbGlkVVJMKCkp
Ci0gICAgICAgIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKCkuc3RyaW5nKCk7Ci0g
ICAgZWxzZSBpZiAoZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiAhbV9wbGF0
Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxl
TmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzWzBdOworICAgIFN0cmluZyB1cmwg
PSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldFVSTCh0aXRsZSk7CisgICAgaWYgKCFLVVJMKEtVUkwo
KSwgdXJsKS5pc1ZhbGlkKCkKKyAgICAgICAgJiYgZmlsZW5hbWVQb2xpY3kgPT0gQ29udmVydEZp
bGVuYW1lcworICAgICAgICAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc0ZpbGVuYW1lcygpKSB7
CisgICAgICAgIFN0cmluZyBmaWxlTmFtZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVz
KClbMF07CiAgICAgICAgIGZpbGVOYW1lID0gQ2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRlUGF0
aChmaWxlTmFtZSk7CiAgICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJM
KGZpbGVOYW1lKS5zdHJpbmcoKTsKKyAgICAgICAgaWYgKHRpdGxlKQorICAgICAgICAgICp0aXRs
ZSA9ICIiOwogICAgIH0KICAKLSAgICAvLyB8dGl0bGV8IGNhbiBiZSBOVUxMCi0gICAgaWYgKHRp
dGxlKQotICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0RhdGEtPnVybFRpdGxlOwogICAg
IHJldHVybiB1cmw7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAog
ewotICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMuaXNFbXB0eSgpOwor
ICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc0ZpbGVuYW1lcygpOwogfQogCiB2b2lk
IERyYWdEYXRhOjphc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAogewot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9wbGF0Zm9ybURyYWdEYXRhLT5m
aWxlbmFtZXNbaV0pOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmlsZW5hbWVzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKGZpbGVuYW1lc1tp
XSk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5UZXh0KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gIW1fcGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKTsKKyAgICBy
ZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3BsYWluIik7
CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6YXNQbGFpblRleHQoKSBjb25zdAogewotICAgIHJldHVy
biBtX3BsYXRmb3JtRHJhZ0RhdGEtPnBsYWluVGV4dDsKKyAgICBib29sIGlnbm9yZWRTdWNjZXNz
OworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldERhdGEoInRleHQvcGxhaW4iLCBp
Z25vcmVkU3VjY2Vzcyk7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25z
dApAQCAtMTAxLDggKzEwMyw4IEBAIGJvb2wgRHJhZ0RhdGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNv
bnN0CiAgICAgLy8gVGhpcyBpcyBhbGxvd2VkIHdoZW5ldmVyIHRoZSBkcmFnIGRhdGEgY29udGFp
bnMgYSAncmFuZ2UnIChpZS4sCiAgICAgLy8gQ2xpcGJvYXJkV2luOjp3cml0ZVJhbmdlIGlzIGNh
bGxlZCkuICBGb3IgZXhhbXBsZSwgZHJhZ2dpbmcgYSBsaW5rCiAgICAgLy8gc2hvdWxkIG5vdCBy
ZXN1bHQgaW4gYSBzcGFjZSBiZWluZyBhZGRlZC4KLSAgICByZXR1cm4gIW1fcGxhdGZvcm1EcmFn
RGF0YS0+cGxhaW5UZXh0LmlzRW1wdHkoKQotICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRh
LT5oYXNWYWxpZFVSTCgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCku
Y29udGFpbnMoInRleHQvcGxhaW4iKQorICAgICAgICAmJiAhbV9wbGF0Zm9ybURyYWdEYXRhLT50
eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0Iik7CiB9CiAKIGJvb2wgRHJhZ0RhdGE6OmNv
bnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdApAQCAtMTM0LDkgKzEzNiwxMSBAQCBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KERvY3VtZW50KiBk
b2MpIGNvbnN0CiAgICAgICAgIC8vICAgIHJldHVybiBmcmFnbWVudDsKICAgICB9CiAKLSAgICBp
ZiAoIW1fcGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1f
cGxhdGZvcm1EcmFnRGF0YS0+dHlwZXMoKS5jb250YWlucygidGV4dC9odG1sIikpIHsKKyAgICAg
ICAgU3RyaW5nIGJhc2VVUkw7CisgICAgICAgIFN0cmluZyBodG1sID0gbV9wbGF0Zm9ybURyYWdE
YXRhLT5nZXRIVE1MKCZiYXNlVVJMKTsKICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvYywKLSAgICAgICAgICAgIG1f
cGxhdGZvcm1EcmFnRGF0YS0+dGV4dEh0bWwsIG1fcGxhdGZvcm1EcmFnRGF0YS0+aHRtbEJhc2VV
cmwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CisgICAgICAgICAgICBodG1sLCBiYXNl
VVJMLCBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwogICAgICAgICByZXR1cm4gZnJhZ21l
bnQucmVsZWFzZSgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9S
ZWFkYWJsZURhdGFPYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjUzNzgxODcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Jl
YWRhYmxlRGF0YU9iamVjdC5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgsIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgorCisjaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBjbGlwYm9hcmRCdWZmZXIoYm9vbCBpc0ZvckRyYWdn
aW5nKQoreworICAgIHJldHVybiBpc0ZvckRyYWdnaW5nID8gUGFzdGVib2FyZFByaXZhdGU6OkRy
YWdCdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Cit9CisKK3N0YXRp
YyB2b2lkIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKGJvb2wgaXNGb3JEcmFnZ2luZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wmIGlzVHlwZUNhY2hlSW5p
dGlhbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoU2V0
PFN0cmluZz4mIHR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCYgY29udGFpbnNGaWxlbmFtZXMpCit7CisgICAgaWYgKGlzVHlwZUNhY2hlSW5pdGlhbGl6
ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHR5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKGlzRm9yRHJh
Z2dpbmcpLCAmY29udGFpbnNGaWxlbmFtZXMpOworICAgIGlzVHlwZUNhY2hlSW5pdGlhbGl6ZWQg
PSB0cnVlOworfQorCitQYXNzUmVmUHRyPFJlYWRhYmxlRGF0YU9iamVjdD4gUmVhZGFibGVEYXRh
T2JqZWN0OjpjcmVhdGUoYm9vbCBpc0ZvckRyYWdnaW5nKQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUmVhZGFibGVEYXRhT2JqZWN0KGlzRm9yRHJhZ2dpbmcpKTsKK30KKworUmVhZGFibGVE
YXRhT2JqZWN0OjpSZWFkYWJsZURhdGFPYmplY3QoYm9vbCBpc0ZvckRyYWdnaW5nKQorICAgIDog
bV9pc0ZvckRyYWdnaW5nKGlzRm9yRHJhZ2dpbmcpLCBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQo
ZmFsc2UpCit7Cit9CisKKy8vIE5vbmUgb2YgdGhlIG5vbi1jb25zdCBtZXRob2RzIHNob3VsZCBl
dmVyIGJlIGNhbGxlZC4KK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpjbGVhckRhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJl
YWRhYmxlRGF0YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpjbGVhcigpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgUmVhZGFibGVEYXRhT2JqZWN0Ojpo
YXNEYXRhKCkgY29uc3QKK3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZChtX2lzRm9y
RHJhZ2dpbmcsIG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3R5cGVzLCBtX2NvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICByZXR1cm4gIW1f
dHlwZXMuaXNFbXB0eSgpIHx8IG1fY29udGFpbnNGaWxlbmFtZXM7Cit9CisKK0hhc2hTZXQ8U3Ry
aW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OnR5cGVzKCkgY29uc3QKK3sKKyAgICBlbnN1cmVUeXBl
Q2FjaGVJbml0aWFsaXplZChtX2lzRm9yRHJhZ2dpbmcsIG1faXNUeXBlQ2FjaGVJbml0aWFsaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3R5cGVzLCBtX2NvbnRhaW5zRmls
ZW5hbWVzKTsKKyAgICByZXR1cm4gbV90eXBlczsKK30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9i
amVjdDo6Z2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3QK
K3sKKyAgICBTdHJpbmcgZGF0YTsKKyAgICBTdHJpbmcgaWdub3JlZE1ldGFkYXRhOworICAgIHN1
Y2NlZWRlZCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xp
cGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksIHR5cGUsIGRhdGEsIGlnbm9yZWRNZXRhZGF0
YSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK2Jvb2wgUmVhZGFibGVEYXRhT2JqZWN0OjpzZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFJlYWRhYmxl
RGF0YU9iamVjdDo6Z2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0Cit7CisgICAgU3RyaW5nIHVy
bDsKKyAgICBTdHJpbmcgaWdub3JlZFRpdGxlOworICAgIGlmICghdGl0bGUpCisgICAgICAgIHRp
dGxlID0gJmlnbm9yZWRUaXRsZTsKKyAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERh
dGEoCisgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2lzRm9yRHJhZ2dpbmcpLCAidGV4dC91cmkt
bGlzdCIsIHVybCwgKnRpdGxlKTsKKyAgICByZXR1cm4gdXJsOworfQorCit2b2lkIFJlYWRhYmxl
RGF0YU9iamVjdDo6c2V0VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitTdHJpbmcgUmVhZGFibGVEYXRh
T2JqZWN0OjpnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3QKK3sKKyAgICBTdHJpbmcgaHRt
bDsKKyAgICBTdHJpbmcgaWdub3JlZEJhc2VVUkw7CisgICAgaWYgKCFiYXNlVVJMKQorICAgICAg
ICBiYXNlVVJMID0gJmlnbm9yZWRCYXNlVVJMOworICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1faXNGb3JEcmFnZ2luZyksICJ0
ZXh0L2h0bWwiLCBodG1sLCAqYmFzZVVSTCk7CisgICAgcmV0dXJuIGh0bWw7Cit9CisKK3ZvaWQg
UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VS
TCYgYmFzZVVSTCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBSZWFk
YWJsZURhdGFPYmplY3Q6Omhhc0ZpbGVuYW1lcygpIGNvbnN0Cit7CisgICAgZW5zdXJlVHlwZUNh
Y2hlSW5pdGlhbGl6ZWQobV9pc0ZvckRyYWdnaW5nLCBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90eXBlcywgbV9jb250YWluc0ZpbGVu
YW1lcyk7CisgICAgcmV0dXJuIG1fY29udGFpbnNGaWxlbmFtZXM7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IFJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Q2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1f
aXNGb3JEcmFnZ2luZykpOworfQorCisvLyBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIG9ubHkgYmUg
dXNlZCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyCisvLyB0byB0aGUg
YnJvd3Nlci4KK0hhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IFJlYWRhYmxlRGF0YU9iamVjdDo6ZGF0
YU1hcCgpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Cit9CisKK1N0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6
OnVybFRpdGxlKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gU3RyaW5nKCk7Cit9CisKK0tVUkwgUmVhZGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVSTCgp
IGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEtVUkwoKTsK
K30KKworU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZUV4dGVuc2lvbigpIGNvbnN0Cit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitT
dHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1Bh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVDb250ZW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJikK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWFkYWJsZURhdGFPYmpl
Y3Q6OnNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250
ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNmJkNzIxNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJl
YWRhYmxlRGF0YU9iamVjdF9oCisjZGVmaW5lIFJlYWRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNs
dWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBV
c2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3Rl
IGRhdGEgZnJvbSB0aGUKKy8vIGJyb3dzZXIgdG8gdGhlIHJlbmRlcmVyLgorY2xhc3MgUmVhZGFi
bGVEYXRhT2JqZWN0IDogcHVibGljIENocm9taXVtRGF0YU9iamVjdCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8UmVhZGFibGVEYXRhT2JqZWN0PiBjcmVhdGUoYm9vbCBpc0ZvckRy
YWdnaW5nKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpOworICAgIHZpcnR1YWwg
dm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBn
ZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgc2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0
YSk7CisKKyAgICAvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1MIHNpbmNlIHRo
ZXkgY2FycnkgYWRkaXRpb25hbAorICAgIC8vIG1ldGFkYXRhLgorICAgIHZpcnR1YWwgU3RyaW5n
IGdldFVSTChTdHJpbmcqIHRpdGxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMKGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldEhU
TUwoY29uc3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKTsKKworICAgIHZpcnR1
YWwgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+
IGZpbGVuYW1lcygpIGNvbnN0OworCisgICAgLy8gQWNjZXNzb3JzIHVzZWQgd2hlbiB0cmFuc2Zl
cnJpbmcgZHJhZyBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZQorICAgIC8vIGJyb3dzZXIu
CisgICAgdmlydHVhbCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBkYXRhTWFwKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEtVUkwgaHRt
bEJhc2VVUkwoKSBjb25zdDsKKworICAgIC8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBmaWxlIGRh
dGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCisgICAgdmlydHVhbCBTdHJpbmcg
ZmlsZUV4dGVuc2lvbigpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVDb250ZW50Rmls
ZW5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxl
Q29udGVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudEZpbGVuYW1lKGNvbnN0
IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudChQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4pOworCitwcml2YXRlOgorICAgIFJlYWRhYmxlRGF0YU9iamVjdChib29sIGlz
Rm9yRHJhZ2dpbmcpOworCisgICAgYm9vbCBtX2lzRm9yRHJhZ2dpbmc7CisKKyAgICAvLyBUbyBh
dm9pZCBtYWtpbmcgYSBsb3Qgb2YgSVBDIGNhbGxzIGZvciBlYWNoIGRyYWcgZXZlbnQsIHdlIGNh
Y2hlIHNvbWUKKyAgICAvLyB2YWx1ZXMgaW4gdGhlIHJlbmRlcmVyLgorICAgIC8vIFRPRE86IElz
IHRoaXMgYWN0dWFsbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHRoZSBjYWNoaW5nPyBJc24ndCB0
aGUgZGF0YQorICAgIC8vIG9iamVjdCBnZXR0aW5nIGNyZWF0ZWQvZGVzdHJveWVkIHdpdGggZWFj
aCBkcmFnIGV2ZW50PworICAgIG11dGFibGUgSGFzaFNldDxTdHJpbmc+IG1fdHlwZXM7CisgICAg
bXV0YWJsZSBib29sIG1fY29udGFpbnNGaWxlbmFtZXM7CisgICAgbXV0YWJsZSBib29sIG1faXNU
eXBlQ2FjaGVJbml0aWFsaXplZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9i
amVjdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4MDI0NwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNw
cApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V3JpdGFibGVEYXRhT2JqZWN0LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRPRE86IFZlcmlmeSBpdCB0aGUgaW1wbGVtZW50YXRp
b25zIGZvciByZWFkLW9ubHkgbWV0aG9kcyBhcmUgbmVlZGVkLiBQZXIgdGhlCisvLyBjb2RlIGN1
cnJlbnRseSBpbiBDbGlwYm9hcmRDaHJvbWl1bSwgaXQncyBhY3R1YWxseSB1bm5lY2Vzc2FyeSwg
YnV0IHdlIHNob3VsZAorLy8gZG91YmxlIGNoZWNrIGlmIHRoaXMgaXMgaW50ZW5kZWQgYnkgdGhl
IHNwZWMsIGVzcGVjaWFsbHkgc2luY2UgaXQgZG9lc24ndAorLy8gcmVhbGx5IGFkZHJlc3Mgd2hl
biB0aGUgY2xpcGJvYXJkIG9iamVjdCBzaG91bGQgYmUgcmVhZGFibGUgYW5kIHdoZW4gaXQKKy8v
IHNob3VsZCBiZSB3cml0YWJsZS4KK1Bhc3NSZWZQdHI8V3JpdGFibGVEYXRhT2JqZWN0PiBXcml0
YWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXcml0YWJsZURhdGFPYmplY3QoaXNGb3JEcmFnZ2luZykpOworfQorCitX
cml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVjdChib29sIGlzRm9yRHJhZ2dpbmcp
CisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZykKK3sKK30KKwordm9pZCBXcml0
YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgbV9k
YXRhTWFwLnJlbW92ZSh0eXBlKTsKKyAgICBpZiAodHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisg
ICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwi
KQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VSTCgpOworfQorCit2b2lkIFdyaXRhYmxlRGF0
YU9iamVjdDo6Y2xlYXJBbGxFeGNlcHRGaWxlcygpCit7CisgICAgLy8gVE9ETzogVGhlIHNwZWMg
ZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0byBwb3B1bGF0ZSBGaWxlTGlzdCBjdXJyZW50bHkuIElu
CisgICAgLy8gZmFjdCwgdGhlIHNwZWMgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCBkcmFnZ2luZyBm
aWxlcyBjYW4gb25seSBoYXBwZW4gZnJvbQorICAgIC8vIG91dHNpZGUgYSBicm93c2luZyBjb250
ZXh0LgorICAgIGNsZWFyKCk7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhcigp
Cit7CisgICAgbV9kYXRhTWFwLmNsZWFyKCk7CisgICAgbV91cmxUaXRsZSA9ICIiOworICAgIG1f
aHRtbEJhc2VVUkwgPSBLVVJMKCk7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gIiI7Cisg
ICAgaWYgKG1fZmlsZUNvbnRlbnQpCisgICAgICAgIG1fZmlsZUNvbnRlbnQtPmNsZWFyKCk7Cit9
CisKK2Jvb2wgV3JpdGFibGVEYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gIW1fZGF0YU1hcC5pc0VtcHR5KCkgfHwgKG1fZmlsZUNvbnRlbnQgJiYgIW1fZmlsZUNvbnRl
bnQtPmlzRW1wdHkoKSk7Cit9CisKK0hhc2hTZXQ8U3RyaW5nPiBXcml0YWJsZURhdGFPYmplY3Q6
OnR5cGVzKCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIGZvciAo
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhTWFwLmJl
Z2luKCk7CisgICAgICAgICBpdCAhPSBtX2RhdGFNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
cmVzdWx0LmFkZChpdC0+Zmlyc3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9v
bCYgc3VjY2VlZGVkKSBjb25zdAoreworICAgIC8vIFRPRE86IEZvciBwYXN0aW5nLCB3ZSBuZWVk
IHRvIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgcGFzdGVib2FyZC4gUmlnaHQKKyAgICAvLyBub3cs
IENsaXBib2FyZDo6Z2V0RGF0YSBkb2Vzbid0IGFsbG93IHJlYWRzIHdoZW4gdGhlIGNsaXBib2Fy
ZCBpcworICAgIC8vIHdyaXRhYmxlLCBidXQgd2UgaGF2ZSBtYXkgdG8gYWRkcmVzcyB0aGlzIGlu
IHRoZSBmdXR1cmUuCisgICAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9kYXRhTWFwLmZpbmQodHlwZSk7CisgICAgaWYgKGl0ICE9IG1fZGF0YU1hcC5lbmQo
KSkgeworICAgICAgICBzdWNjZWVkZWQgPSB0cnVlOworICAgICAgICByZXR1cm4gaXQtPnNlY29u
ZDsKKyAgICB9CisgICAgc3VjY2VlZGVkID0gZmFsc2U7CisgICAgcmV0dXJuIFN0cmluZygpOwor
fQorCitib29sIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgZGF0YSkKK3sKKyAgICBpZiAobV9pc0ZvckRyYWdnaW5nKSB7CisgICAg
ICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEodHlwZSwgZGF0YSwgIiIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgbV9kYXRhTWFwLnNldCh0eXBlLCBkYXRh
KTsKKyAgICBpZiAodHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUg
PSAiIjsKKyAgICBlbHNlIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxC
YXNlVVJMID0gS1VSTCgpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBTcGVjaWFsIGFjY2Vz
c29ycyBmb3IgVVJMIGFuZCBIVE1MIHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAorLy8gbWV0
YWRhdGEuCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkg
Y29uc3QKK3sKKyAgICBpZiAodGl0bGUpCisgICAgICAgICp0aXRsZSA9IG1fdXJsVGl0bGU7Cisg
ICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gZ2V0RGF0YSgidGV4dC91cmktbGlz
dCIsIGlnbm9yZWRTdWNjZXNzKTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVS
TChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBzZXREYXRh
KCJ0ZXh0L3VyaS1saXN0IiwgdXJsKTsKKyAgICBtX3VybFRpdGxlID0gdGl0bGU7Cit9CisKK1N0
cmluZyBXcml0YWJsZURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdAor
eworICAgIGlmIChiYXNlVVJMKQorICAgICAgICAqYmFzZVVSTCA9IG1faHRtbEJhc2VVUkw7Cisg
ICAgYm9vbCBpZ25vcmVkU3VjY2VzczsKKyAgICByZXR1cm4gZ2V0RGF0YSgidGV4dC9odG1sIiwg
aWdub3JlZFN1Y2Nlc3MpOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTChj
b25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7CisgICAgc2V0RGF0YSgi
dGV4dC9odG1sIiwgaHRtbCk7CisgICAgbV9odG1sQmFzZVVSTCA9IGJhc2VVUkw7Cit9CisKK2Jv
b2wgV3JpdGFibGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworVmVjdG9yPFN0cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlbmFt
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCisvLyBBY2Nl
c3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIg
dG8gdGhlCisvLyBicm93c2VyLgorSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gV3JpdGFibGVEYXRh
T2JqZWN0OjpkYXRhTWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhTWFwOworfQorCitT
dHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdXJsVGl0bGU7Cit9CisKK0tVUkwgV3JpdGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVSTCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faHRtbEJhc2VVUkw7Cit9CisKKy8vIFVzZWQgZm9yIHRy
YW5zZmVycmluZyBmaWxlIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCitT
dHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9maWxlRXh0ZW5zaW9uOworfQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0Ojpm
aWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlQ29udGVudEZp
bGVuYW1lOworfQorCitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gV3JpdGFibGVEYXRhT2JqZWN0
OjpmaWxlQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnQ7Cit9CisK
K3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZmlsZUV4dGVuc2lvbikKK3sKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOwor
fQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25z
dCBTdHJpbmcmIGZpbGVDb250ZW50RmlsZW5hbWUpCit7CisgICAgbV9maWxlQ29udGVudEZpbGVu
YW1lID0gZmlsZUNvbnRlbnRGaWxlbmFtZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6
OnNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkKK3sK
KyAgICBtX2ZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURh
dGFPYmplY3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA0ZWEwNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgK
QEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9iamVjdF9oCisjZGVm
aW5lIFdyaXRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3Qu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11bmlj
YXRpb24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRl
cmVyIHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVudGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFn
c3RhcnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRvIHNob3J0Y29taW5ncywgd3JpdGVzIHRv
IHRoZSBjbGlwYm9hcmQgY2Fubm90IGJlIHBlcmZvcm1lZAorLy8gYXRvbWljYWxseS4KK2NsYXNz
IFdyaXRhYmxlRGF0YU9iamVjdCA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3QgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4gY3JlYXRlKGJvb2wg
aXNGb3JEcmFnZ2luZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmlu
ZyYgdHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEpOworCisgICAgLy8gU3BlY2lhbCBhY2Nlc3NvcnMgZm9yIFVSTCBhbmQgSFRNTCBz
aW5jZSB0aGV5IGNhcnJ5IGFkZGl0aW9uYWwKKyAgICAvLyBtZXRhZGF0YS4KKyAgICB2aXJ0dWFs
IFN0cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNl
dFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmlydHVh
bCBTdHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBzZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8
U3RyaW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKKworICAgIC8vIEFjY2Vzc29ycyB1c2VkIHdoZW4g
dHJhbnNmZXJyaW5nIGRyYWcgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0byB0aGUKKyAgICAvLyBi
cm93c2VyLgorICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YU1hcCgpIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHVybFRpdGxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBL
VVJMIGh0bWxCYXNlVVJMKCkgY29uc3Q7CisKKyAgICAvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcg
ZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLgorICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29u
dGVudEZpbGVuYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVuc2lv
bihjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFt
ZShjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+KTsKKworcHJpdmF0ZToKKyAgICBXcml0YWJsZURhdGFPYmplY3Qo
Ym9vbCBpc0ZvckRyYWdnaW5nKTsKKworICAgIGJvb2wgbV9pc0ZvckRyYWdnaW5nOworCisgICAg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gbV9kYXRhTWFwOworICAgIFN0cmluZyBtX3VybFRpdGxl
OworICAgIEtVUkwgbV9odG1sQmFzZVVSTDsKKyAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9uOwor
ICAgIFN0cmluZyBtX2ZpbGVDb250ZW50RmlsZW5hbWU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gbV9maWxlQ29udGVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDbGlwYm9hcmQuaAppbmRleCA2NzU1ZDk2Li44NjFjNTIy
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNsaXBib2FyZC5oCisrKyBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2xpcGJvYXJkLmgKQEAgLTcxLDcgKzcxLDEwIEBA
IHB1YmxpYzoKICAgICAgICAgY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViU3RyaW5nJiB0aXRsZSkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSW1hZ2UoCiAgICAgICAgIGNvbnN0IFdlYkltYWdl
JiwgY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViU3RyaW5nJiB0aXRsZSkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIHdyaXRlRGF0YShjb25zdCBXZWJEcmFnRGF0YSYpIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB3cml0ZURhdGEoCisgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdHlwZSwKKyAgICAgICAgY29u
c3QgV2ViU3RyaW5nJiBkYXRhLAorICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG1ldGFkYXRhKSB7
IH0KIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGZvciByZWFkaW5n
IHBsYXRmb3JtIGRhdGEgZm9yIGNvcHkgYW5kCiAgICAgLy8gcGFzdGUsIGRyYWcgYW5kIGRyb3As
IGFuZCBzZWxlY3Rpb24gY29weSAob24gWCkuCkBAIC04MSw3ICs4NCw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgcmVhZERhdGEoCiAgICAgICAgIEJ1ZmZlciwgY29uc3QgV2ViU3RyaW5n
JiB0eXBlLCBXZWJTdHJpbmcqIGRhdGEsCiAgICAgICAgIFdlYlN0cmluZyogbWV0YWRhdGEpIHsg
cmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZWFkRmls
ZW5hbWVzKEJ1ZmZlcikgeyByZXR1cm4gV2ViVmVjdG9yPFdlYlN0cmluZz4oKTsgfQorICAgIHZp
cnR1YWwgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVhZEZpbGVuYW1lcygKKyAgICAgICAgQnVmZmVy
KSB7IHJldHVybiBXZWJWZWN0b3I8V2ViU3RyaW5nPigpOyB9CiAKIHByb3RlY3RlZDoKICAgICB+
V2ViQ2xpcGJvYXJkKCkge30KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RHJhZ0RhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0RhdGEuaAppbmRleCAy
OTc5NTE5Li4yNmZiNzEzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRy
YWdEYXRhLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCkBAIC00
Niw4ICs0Niw4IEBAIGNsYXNzIFdlYlN0cmluZzsKIGNsYXNzIFdlYlVSTDsKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKLS8vIEhvbGRzIGRhdGEgdGhhdCBtYXkgYmUg
ZXhjaGFuZ2VkIHRocm91Z2ggYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24uICBJdCBpcwotLy8gaW5l
eHBlbnNpdmUgdG8gY29weSBhIFdlYkRyYWdEYXRhIG9iamVjdC4KKy8vIEhvbGRzIGRhdGEgdGhh
dCBtYXkgYmUgZXhjaGFuZ2VkIHRocm91Z2ggYSBkcmFnLW4tZHJvcCBvcGVyYXRpb24gc3RhcnRl
ZCBpbgorLy8gdGhlIHJlbmRlcmVyLgogY2xhc3MgV2ViRHJhZ0RhdGEgewogcHVibGljOgogICAg
IH5XZWJEcmFnRGF0YSgpIHsgcmVzZXQoKTsgfQpAQCAtNjAsNDMgKzYwLDIyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIAotICAgIFdFQktJVF9BUEkgdm9pZCBpbml0
aWFsaXplKCk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CiAgICAgV0VCS0lUX0FQSSB2
b2lkIGFzc2lnbihjb25zdCBXZWJEcmFnRGF0YSYpOwogCiAgICAgYm9vbCBpc051bGwoKSBjb25z
dCB7IHJldHVybiAhbV9wcml2YXRlOyB9CiAKLSAgICBXRUJLSVRfQVBJIFdlYlVSTCB1cmwoKSBj
b25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0VVJMKGNvbnN0IFdlYlVSTCYpOwotCisgICAg
V0VCS0lUX0FQSSB2b2lkIGRhdGFNYXAoV2ViVmVjdG9yPFdlYlN0cmluZz4mIHR5cGVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBkYXRhKSBjb25z
dDsKICAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyB1cmxUaXRsZSgpIGNvbnN0OwotICAgIFdFQktJ
VF9BUEkgdm9pZCBzZXRVUkxUaXRsZShjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIGRvd25sb2FkTWV0YWRhdGEoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZv
aWQgc2V0RG93bmxvYWRNZXRhZGF0YShjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQg
c2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgYm9v
bCBoYXNGaWxlTmFtZXMoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgZmlsZU5hbWVzKFdl
YlZlY3RvcjxXZWJTdHJpbmc+JikgY29uc3Q7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIHNldEZpbGVO
YW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYpOwotICAgIFdFQktJVF9BUEkgdm9pZCBh
cHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2Vi
U3RyaW5nIHBsYWluVGV4dCgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBzZXRQbGFpblRl
eHQoY29uc3QgV2ViU3RyaW5nJik7Ci0KLSAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBodG1sVGV4
dCgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBzZXRIVE1MVGV4dChjb25zdCBXZWJTdHJp
bmcmKTsKLQogICAgIFdFQktJVF9BUEkgV2ViVVJMIGh0bWxCYXNlVVJMKCkgY29uc3Q7Ci0gICAg
V0VCS0lUX0FQSSB2b2lkIHNldEhUTUxCYXNlVVJMKGNvbnN0IFdlYlVSTCYpOwotCisgICAgV0VC
S0lUX0FQSSBXZWJTdHJpbmcgZmlsZUV4dGVuc2lvbigpIGNvbnN0OwogICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIGZpbGVDb250ZW50RmlsZU5hbWUoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZv
aWQgc2V0RmlsZUNvbnRlbnRGaWxlTmFtZShjb25zdCBXZWJTdHJpbmcmKTsKLQogICAgIFdFQktJ
VF9BUEkgV2ViRGF0YSBmaWxlQ29udGVudCgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBz
ZXRGaWxlQ29udGVudChjb25zdCBXZWJEYXRhJik7CisKKyAgICAvLyBFeHBvc2VkIGZvciBXZWJQ
bHVnaW5EZWxlZ2F0ZVByb3h5CisgICAgV0VCS0lUX0FQSSBib29sIGhhc0ZpbGVuYW1lcygpIGNv
bnN0OworICAgIFdFQktJVF9BUEkgV2ViVmVjdG9yPFdlYlN0cmluZz4gZmlsZW5hbWVzKCkgY29u
c3Q7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KICAgICBXZWJEcmFnRGF0YShjb25zdCBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hyb21pdW1EYXRhT2JqZWN0PiYpOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYlZpZXcuaAppbmRleCAxYjk0ZGEyLi41NmQ0MTBlIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaApAQCAtMTk1LDggKzE5NSw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsYmFjayBtZXRo
b2RzIHdoZW4gYSBkcmFnLWFuZC1kcm9wIG9wZXJhdGlvbiBpcyB0cnlpbmcgdG8gZHJvcAogICAg
IC8vIHNvbWV0aGluZyBvbiB0aGUgV2ViVmlldy4KICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRp
b24gZHJhZ1RhcmdldERyYWdFbnRlcigKLSAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmLCBpbnQg
aWRlbnRpdHksCi0gICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2Vi
UG9pbnQmIHNjcmVlblBvaW50LAorICAgICAgICBpbnQgaWRlbnRpdHksIGNvbnN0IFdlYlBvaW50
JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJE
cmFnT3BlcmF0aW9uc01hc2sgb3BlcmF0aW9uc0FsbG93ZWQpID0gMDsKICAgICB2aXJ0dWFsIFdl
YkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2lu
dCYgY2xpZW50UG9pbnQsIGNvbnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKaW5kZXggNWIxOGU4Mi4uNWM2N2YxNSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKKysrIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKQEAgLTE5OCwxMSArMTk4LDExIEBAIHZvaWQg
Q2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgaW1hZ2Us
CiAgICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUltYWdlKHdlYkltYWdlLCBz
b3VyY2VVUkwsIHRpdGxlKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3Jp
dGVEYXRhKENsaXBib2FyZERhdGEqIGRhdGEpCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1ldGFkYXRhKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgV2ViRHJhZ0RhdGEgZHJhZ0RhdGE7IC8vIEZJWE1FOiBEZWZpbmUg
dGhlIGNvbnZlcnNpb24gZnJvbSBDbGlwYm9hcmREYXRhIHRvIFdlYkRyYWdEYXRhLgotICAgIHdl
YktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVEYXRhKGRyYWdEYXRhKTsKKyAgICB3ZWJL
aXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7
CiB9CiAKIEhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWls
YWJsZVR5cGVzKApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAppbmRleCA2NDNjMzVkLi42
MjRmYmZlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRyYWdEYXRhLmNwcApAQCAtNDYsMTEgKzQ2LDYg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJEcmFnRGF0YVByaXZhdGUgOiBwdWJsaWMg
Q2hyb21pdW1EYXRhT2JqZWN0IHsKIH07CiAKLXZvaWQgV2ViRHJhZ0RhdGE6OmluaXRpYWxpemUo
KQotewotICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJEcmFnRGF0YVByaXZhdGUqPihDaHJvbWl1
bURhdGFPYmplY3Q6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSkpOwotfQotCiB2b2lkIFdlYkRyYWdE
YXRhOjpyZXNldCgpCiB7CiAgICAgYXNzaWduKDApOwpAQCAtNjQsMTM3ICs1OSw2MSBAQCB2b2lk
IFdlYkRyYWdEYXRhOjphc3NpZ24oY29uc3QgV2ViRHJhZ0RhdGEmIG90aGVyKQogICAgIGFzc2ln
bihwKTsKIH0KIAotV2ViVVJMIFdlYkRyYWdEYXRhOjp1cmwoKSBjb25zdAotewotICAgIEFTU0VS
VCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFVSTCgpOwotfQotCi12b2lk
IFdlYkRyYWdEYXRhOjpzZXRVUkwoY29uc3QgV2ViVVJMJiB1cmwpCit2b2lkIFdlYkRyYWdEYXRh
OjpkYXRhTWFwKFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB0eXBlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGRhdGEpIGNvbnN0CiB7Ci0gICAgZW5zdXJl
TXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+c2V0VVJMKHVybCk7CisgICAgY29uc3QgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4mIG1hcCA9IG1fcHJpdmF0ZS0+ZGF0YU1hcCgpOworICAgIFdlYlZl
Y3RvcjxXZWJTdHJpbmc+KHN0YXRpY19jYXN0PHNpemVfdD4obWFwLnNpemUoKSkpLnN3YXAodHlw
ZXMpOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+KHN0YXRpY19jYXN0PHNpemVfdD4obWFwLnNp
emUoKSkpLnN3YXAoZGF0YSk7CisgICAgaW50IGkgPSAwOworICAgIGZvciAoSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLmJlZ2luKCk7CisgICAgICAgICBp
dCAhPSBtYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgdHlwZXNbaV0gPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgIGRhdGFbaV0gPSBpdC0+c2Vjb25kOworICAgICAgICBpKys7CisgICAgfQogfQogCiBX
ZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnVybFRpdGxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT51cmxUaXRsZTsKLX0KLQotdm9pZCBXZWJE
cmFnRGF0YTo6c2V0VVJMVGl0bGUoY29uc3QgV2ViU3RyaW5nJiB1cmxUaXRsZSkKLXsKLSAgICBl
bnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT51cmxUaXRsZSA9IHVybFRpdGxlOwotfQot
Ci1XZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmRvd25sb2FkTWV0YWRhdGEoKSBjb25zdAotewotICAg
IEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmRvd25sb2FkTWV0YWRh
dGE7Ci19Ci0KLXZvaWQgV2ViRHJhZ0RhdGE6OnNldERvd25sb2FkTWV0YWRhdGEoY29uc3QgV2Vi
U3RyaW5nJiBkb3dubG9hZE1ldGFkYXRhKQotewotICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBt
X3ByaXZhdGUtPmRvd25sb2FkTWV0YWRhdGEgPSBkb3dubG9hZE1ldGFkYXRhOworICAgIHJldHVy
biBtX3ByaXZhdGUtPnVybFRpdGxlKCk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6Zmls
ZUV4dGVuc2lvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJu
IG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbjsKLX0KLQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0Rmls
ZUV4dGVuc2lvbihjb25zdCBXZWJTdHJpbmcmIGZpbGVFeHRlbnNpb24pCi17Ci0gICAgZW5zdXJl
TXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbiA9IGZpbGVFeHRlbnNpb247
Ci19Ci0KLWJvb2wgV2ViRHJhZ0RhdGE6Omhhc0ZpbGVOYW1lcygpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuICFtX3ByaXZhdGUtPmZpbGVuYW1lcy5pc0VtcHR5
KCk7Ci19Ci0KLXZvaWQgV2ViRHJhZ0RhdGE6OmZpbGVOYW1lcyhXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgZmlsZU5hbWVzKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIGZpbGVO
YW1lcyA9IG1fcHJpdmF0ZS0+ZmlsZW5hbWVzOwotfQotCi12b2lkIFdlYkRyYWdEYXRhOjpzZXRG
aWxlTmFtZXMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGZpbGVOYW1lcykKLXsKLSAgICBl
bnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlbmFtZXMuY2xlYXIoKTsKLSAgICBt
X3ByaXZhdGUtPmZpbGVuYW1lcy5hcHBlbmQoZmlsZU5hbWVzLmRhdGEoKSwgZmlsZU5hbWVzLnNp
emUoKSk7Ci19Ci0KLXZvaWQgV2ViRHJhZ0RhdGE6OmFwcGVuZFRvRmlsZU5hbWVzKGNvbnN0IFdl
YlN0cmluZyYgZmlsZU5hbWUpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0
ZS0+ZmlsZW5hbWVzLmFwcGVuZChmaWxlTmFtZSk7Ci19Ci0KLVdlYlN0cmluZyBXZWJEcmFnRGF0
YTo6cGxhaW5UZXh0KCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1
cm4gbV9wcml2YXRlLT5wbGFpblRleHQ7Ci19Ci0KLXZvaWQgV2ViRHJhZ0RhdGE6OnNldFBsYWlu
VGV4dChjb25zdCBXZWJTdHJpbmcmIHBsYWluVGV4dCkKLXsKLSAgICBlbnN1cmVNdXRhYmxlKCk7
Ci0gICAgbV9wcml2YXRlLT5wbGFpblRleHQgPSBwbGFpblRleHQ7Ci19Ci0KLVdlYlN0cmluZyBX
ZWJEcmFnRGF0YTo6aHRtbFRleHQoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwot
ICAgIHJldHVybiBtX3ByaXZhdGUtPnRleHRIdG1sOwotfQotCi12b2lkIFdlYkRyYWdEYXRhOjpz
ZXRIVE1MVGV4dChjb25zdCBXZWJTdHJpbmcmIGh0bWxUZXh0KQotewotICAgIGVuc3VyZU11dGFi
bGUoKTsKLSAgICBtX3ByaXZhdGUtPnRleHRIdG1sID0gaHRtbFRleHQ7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+ZmlsZUV4dGVuc2lvbigpOwogfQogCiBXZWJVUkwgV2ViRHJhZ0RhdGE6Omh0bWxC
YXNlVVJMKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9w
cml2YXRlLT5odG1sQmFzZVVybDsKLX0KLQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTEJhc2VV
UkwoY29uc3QgV2ViVVJMJiBodG1sQmFzZVVSTCkKLXsKLSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0g
ICAgbV9wcml2YXRlLT5odG1sQmFzZVVybCA9IGh0bWxCYXNlVVJMOworICAgIHJldHVybiBtX3By
aXZhdGUtPmh0bWxCYXNlVVJMKCk7CiB9CiAKIFdlYlN0cmluZyBXZWJEcmFnRGF0YTo6ZmlsZUNv
bnRlbnRGaWxlTmFtZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0
dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5maWxlQ29udGVudEZpbGVuYW1lKCk7CiB9CiAKLXZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVD
b250ZW50RmlsZU5hbWUoY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSkKK1dlYkRhdGEgV2ViRHJh
Z0RhdGE6OmZpbGVDb250ZW50KCkgY29uc3QKIHsKLSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAg
bV9wcml2YXRlLT5maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZU5hbWU7CisgICAgQVNTRVJUKCFp
c051bGwoKSk7CisgICAgcmV0dXJuIFdlYkRhdGEobV9wcml2YXRlLT5maWxlQ29udGVudCgpKTsK
IH0KIAotV2ViRGF0YSBXZWJEcmFnRGF0YTo6ZmlsZUNvbnRlbnQoKSBjb25zdAorYm9vbCBXZWJE
cmFnRGF0YTo6aGFzRmlsZW5hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
LSAgICByZXR1cm4gV2ViRGF0YShtX3ByaXZhdGUtPmZpbGVDb250ZW50KTsKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5oYXNGaWxlbmFtZXMoKTsKIH0KIAotdm9pZCBXZWJEcmFnRGF0YTo6c2V0Rmls
ZUNvbnRlbnQoY29uc3QgV2ViRGF0YSYgZmlsZUNvbnRlbnQpCitXZWJWZWN0b3I8V2ViU3RyaW5n
PiBXZWJEcmFnRGF0YTo6ZmlsZW5hbWVzKCkgY29uc3QKIHsKLSAgICBlbnN1cmVNdXRhYmxlKCk7
Ci0gICAgbV9wcml2YXRlLT5maWxlQ29udGVudCA9IGZpbGVDb250ZW50OworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVuYW1lcygpOwogfQogCiBXZWJE
cmFnRGF0YTo6V2ViRHJhZ0RhdGEoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkNocm9t
aXVtRGF0YU9iamVjdD4mIGRhdGEpCkBAIC0yMjEsMTEgKzE0MCw0IEBAIHZvaWQgV2ViRHJhZ0Rh
dGE6OmFzc2lnbihXZWJEcmFnRGF0YVByaXZhdGUqIHApCiAgICAgbV9wcml2YXRlID0gcDsKIH0K
IAotdm9pZCBXZWJEcmFnRGF0YTo6ZW5zdXJlTXV0YWJsZSgpCi17Ci0gICAgQVNTRVJUKCFpc051
bGwoKSk7Ci0gICAgaWYgKCFtX3ByaXZhdGUtPmhhc09uZVJlZigpKQotICAgICAgICBhc3NpZ24o
c3RhdGljX2Nhc3Q8V2ViRHJhZ0RhdGFQcml2YXRlKj4obV9wcml2YXRlLT5jb3B5KCkucmVsZWFz
ZVJlZigpKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAppbmRleCA2MmIyMGQ1Li43OWNkMjAxIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcApAQCAtODEsNiArODEsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNocm9taXVt
LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFj
a2VyLmgiCisjaW5jbHVkZSAiUmVhZGFibGVEYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKQEAgLTE1NjksMTQgKzE1NzAsMTQgQEAgdm9pZCBXZWJWaWV3SW1wbDo6ZHJhZ1Nv
dXJjZVN5c3RlbURyYWdFbmRlZCgpCiB9CiAKIFdlYkRyYWdPcGVyYXRpb24gV2ViVmlld0ltcGw6
OmRyYWdUYXJnZXREcmFnRW50ZXIoCi0gICAgY29uc3QgV2ViRHJhZ0RhdGEmIHdlYkRyYWdEYXRh
LCBpbnQgaWRlbnRpdHksCisgICAgaW50IGlkZW50aXR5LAogICAgIGNvbnN0IFdlYlBvaW50JiBj
bGllbnRQb2ludCwKICAgICBjb25zdCBXZWJQb2ludCYgc2NyZWVuUG9pbnQsCiAgICAgV2ViRHJh
Z09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2VkKQogewogICAgIEFTU0VSVCghbV9jdXJy
ZW50RHJhZ0RhdGEuZ2V0KCkpOwogCi0gICAgbV9jdXJyZW50RHJhZ0RhdGEgPSB3ZWJEcmFnRGF0
YTsKKyAgICBtX2N1cnJlbnREcmFnRGF0YSA9IFJlYWRhYmxlRGF0YU9iamVjdDo6Y3JlYXRlKHRy
dWUpOwogICAgIG1fZHJhZ0lkZW50aXR5ID0gaWRlbnRpdHk7CiAgICAgbV9vcGVyYXRpb25zQWxs
b3dlZCA9IG9wZXJhdGlvbnNBbGxvd2VkOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5k
ZXggYzI5NjEyMS4uNjU5OTJhMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaApAQCAtMTQ0
LDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24p
OwogICAgIHZpcnR1YWwgdm9pZCBkcmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCk7CiAgICAgdmly
dHVhbCBXZWJEcmFnT3BlcmF0aW9uIGRyYWdUYXJnZXREcmFnRW50ZXIoCi0gICAgICAgIGNvbnN0
IFdlYkRyYWdEYXRhJiBkcmFnRGF0YSwgaW50IGlkZW50aXR5LAorICAgICAgICBpbnQgaWRlbnRp
dHksCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwKICAgICAgICAgY29uc3Qg
V2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sgb3Bl
cmF0aW9uc0FsbG93ZWQpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRXZlbnRTZW5kZXIuY3BwCmluZGV4IGJiM2MwN2YuLmViYWVhY2UgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcAorKysg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAKQEAg
LTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJwdWJsaWMvV2ViVG91Y2hQb2ludC5oIgogI2luY2x1
ZGUgInB1YmxpYy9XZWJWaWV3LmgiCiAjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1
cHBvcnQuaCIKKyNpbmNsdWRlICJ3ZWJraXQvdG9vbHMvdGVzdF9zaGVsbC9tb2NrX3dlYmNsaXBi
b2FyZF9pbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgogCkBAIC04OCw3ICs4OSw3IEBAIHN0cnVjdCBTYXZlZEV2ZW50IHsKICAgICAg
ICAgLCBtaWxsaXNlY29uZHMoMCkge30KIH07CiAKLXN0YXRpYyBXZWJEcmFnRGF0YSBjdXJyZW50
RHJhZ0RhdGE7CitzdGF0aWMgYm9vbCBpc0luRHJhZyA9IGZhbHNlOwogc3RhdGljIFdlYkRyYWdP
cGVyYXRpb24gY3VycmVudERyYWdFZmZlY3Q7CiBzdGF0aWMgV2ViRHJhZ09wZXJhdGlvbnNNYXNr
IGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQ7CiBzdGF0aWMgYm9vbCByZXBsYXlpbmdTYXZlZEV2
ZW50cyA9IGZhbHNlOwpAQCAtMjk5LDggKzMwMCw4IEBAIEV2ZW50U2VuZGVyOjpFdmVudFNlbmRl
cihUZXN0U2hlbGwqIHNoZWxsKQogdm9pZCBFdmVudFNlbmRlcjo6cmVzZXQoKQogewogICAgIC8v
IFRoZSB0ZXN0IHNob3VsZCBoYXZlIGZpbmlzaGVkIGEgZHJhZyBhbmQgdGhlIG1vdXNlIGJ1dHRv
biBzdGF0ZS4KLSAgICBBU1NFUlQoY3VycmVudERyYWdEYXRhLmlzTnVsbCgpKTsKLSAgICBjdXJy
ZW50RHJhZ0RhdGEucmVzZXQoKTsKKyAgICBBU1NFUlQoIWlzSW5EcmFnKTsKKyAgICBpc0luRHJh
ZyA9IGZhbHNlOwogICAgIGN1cnJlbnREcmFnRWZmZWN0ID0gV2ViS2l0OjpXZWJEcmFnT3BlcmF0
aW9uTm9uZTsKICAgICBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkID0gV2ViS2l0OjpXZWJEcmFn
T3BlcmF0aW9uTm9uZTsKICAgICBwcmVzc2VkQnV0dG9uID0gV2ViTW91c2VFdmVudDo6QnV0dG9u
Tm9uZTsKQEAgLTMzMSwxNSArMzMyLDE1IEBAIFdlYlZpZXcqIEV2ZW50U2VuZGVyOjp3ZWJ2aWV3
KCkKICAgICByZXR1cm4gbV9zaGVsbC0+d2ViVmlldygpOwogfQogCi12b2lkIEV2ZW50U2VuZGVy
Ojpkb0RyYWdEcm9wKGNvbnN0IFdlYkRyYWdEYXRhJiBkcmFnRGF0YSwgV2ViRHJhZ09wZXJhdGlv
bnNNYXNrIG1hc2spCit2b2lkIEV2ZW50U2VuZGVyOjpkb0RyYWdEcm9wKFdlYkRyYWdPcGVyYXRp
b25zTWFzayBtYXNrKQogewogICAgIFdlYk1vdXNlRXZlbnQgZXZlbnQ7CiAgICAgaW5pdE1vdXNl
RXZlbnQoV2ViSW5wdXRFdmVudDo6TW91c2VEb3duLCBwcmVzc2VkQnV0dG9uLCBsYXN0TW91c2VQ
b3MsICZldmVudCk7CiAgICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZXZlbnQueCwgZXZlbnQueSk7
CiAgICAgV2ViUG9pbnQgc2NyZWVuUG9pbnQoZXZlbnQuZ2xvYmFsWCwgZXZlbnQuZ2xvYmFsWSk7
Ci0gICAgY3VycmVudERyYWdEYXRhID0gZHJhZ0RhdGE7CisgICAgaXNJbkRyYWcgPSB0cnVlOwog
ICAgIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQgPSBtYXNrOwotICAgIGN1cnJlbnREcmFnRWZm
ZWN0ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ0VudGVyKGRyYWdEYXRhLCAwLCBjbGllbnRQ
b2ludCwgc2NyZWVuUG9pbnQsIGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQpOworICAgIGN1cnJl
bnREcmFnRWZmZWN0ID0gd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ0VudGVyKDAsIGNsaWVudFBv
aW50LCBzY3JlZW5Qb2ludCwgY3VycmVudERyYWdFZmZlY3RzQWxsb3dlZCk7CiAKICAgICAvLyBG
aW5pc2ggcHJvY2Vzc2luZyBldmVudHMuCiAgICAgcmVwbGF5U2F2ZWRFdmVudHMoKTsKQEAgLTQz
Niw3ICs0MzcsNyBAQCB2b2lkIEV2ZW50U2VuZGVyOjpkb01vdXNlVXAoY29uc3QgV2ViTW91c2VF
dmVudCYgZSkKICAgICBsYXN0Q2xpY2tQb3MgPSBsYXN0TW91c2VQb3M7CiAKICAgICAvLyBJZiB3
ZSdyZSBpbiBhIGRyYWcgb3BlcmF0aW9uLCBjb21wbGV0ZSBpdC4KLSAgICBpZiAoY3VycmVudERy
YWdEYXRhLmlzTnVsbCgpKQorICAgIGlmICghaXNJbkRyYWcpCiAgICAgICAgIHJldHVybjsKICAg
ICBXZWJQb2ludCBjbGllbnRQb2ludChlLngsIGUueSk7CiAgICAgV2ViUG9pbnQgc2NyZWVuUG9p
bnQoZS5nbG9iYWxYLCBlLmdsb2JhbFkpOwpAQCAtNDQ5LDcgKzQ1MCw3IEBAIHZvaWQgRXZlbnRT
ZW5kZXI6OmRvTW91c2VVcChjb25zdCBXZWJNb3VzZUV2ZW50JiBlKQogICAgIHdlYnZpZXcoKS0+
ZHJhZ1NvdXJjZUVuZGVkQXQoY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBjdXJyZW50RHJhZ0Vm
ZmVjdCk7CiAgICAgd2VidmlldygpLT5kcmFnU291cmNlU3lzdGVtRHJhZ0VuZGVkKCk7CiAKLSAg
ICBjdXJyZW50RHJhZ0RhdGEucmVzZXQoKTsKKyAgICBpc0luRHJhZyA9IGZhbHNlOwogfQogCiB2
b2lkIEV2ZW50U2VuZGVyOjptb3VzZU1vdmVUbyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtNTA2LDcgKzUwNyw3IEBAIHZvaWQgRXZlbnRT
ZW5kZXI6OmRvTW91c2VNb3ZlKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGUpCiAKICAgICB3ZWJ2aWV3
KCktPmhhbmRsZUlucHV0RXZlbnQoZSk7CiAKLSAgICBpZiAocHJlc3NlZEJ1dHRvbiA9PSBXZWJN
b3VzZUV2ZW50OjpCdXR0b25Ob25lIHx8IGN1cnJlbnREcmFnRGF0YS5pc051bGwoKSkKKyAgICBp
ZiAocHJlc3NlZEJ1dHRvbiA9PSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lIHx8ICFpc0luRHJh
ZykKICAgICAgICAgcmV0dXJuOwogICAgIFdlYlBvaW50IGNsaWVudFBvaW50KGUueCwgZS55KTsK
ICAgICBXZWJQb2ludCBzY3JlZW5Qb2ludChlLmdsb2JhbFgsIGUuZ2xvYmFsWSk7CkBAIC03Nzks
MTQgKzc4MCwxNiBAQCB2b2lkIEV2ZW50U2VuZGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNr
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcAogCiB2b2lkIEV2ZW50U2VuZGVy
OjpiZWdpbkRyYWdXaXRoRmlsZXMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENw
cFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBjdXJyZW50RHJhZ0RhdGEuaW5pdGlhbGl6ZSgpOwor
ICAgIE1vY2tXZWJDbGlwYm9hcmRJbXBsOjpyZXNldERyYWdEYXRhKCk7CiAgICAgVmVjdG9yPHN0
cmluZz4gZmlsZXMgPSBhcmd1bWVudHNbMF0udG9TdHJpbmdWZWN0b3IoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbGVzLnNpemUoKTsgKytpKQotICAgICAgICBjdXJyZW50RHJhZ0Rh
dGEuYXBwZW5kVG9GaWxlTmFtZXMod2Via2l0X3N1cHBvcnQ6OkdldEFic29sdXRlV2ViU3RyaW5n
RnJvbVVURjhQYXRoKGZpbGVzW2ldKSk7CisgICAgICAgIE1vY2tXZWJDbGlwYm9hcmRJbXBsOjph
ZGRGaWxlVG9EcmFnKAorICAgICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OkdldEFic29sdXRlV2Vi
U3RyaW5nRnJvbVVURjhQYXRoKGZpbGVzW2ldKSk7CisgICAgaXNJbkRyYWcgPSB0cnVlOwogICAg
IGN1cnJlbnREcmFnRWZmZWN0c0FsbG93ZWQgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Db3B5
OwogCiAgICAgLy8gUHJvdmlkZSBhIGRyYWcgc291cmNlLgotICAgIHdlYnZpZXcoKS0+ZHJhZ1Rh
cmdldERyYWdFbnRlcihjdXJyZW50RHJhZ0RhdGEsIDAsIGxhc3RNb3VzZVBvcywgbGFzdE1vdXNl
UG9zLCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkKTsKKyAgICB3ZWJ2aWV3KCktPmRyYWdUYXJn
ZXREcmFnRW50ZXIoMCwgbGFzdE1vdXNlUG9zLCBsYXN0TW91c2VQb3MsIGN1cnJlbnREcmFnRWZm
ZWN0c0FsbG93ZWQpOwogCiAgICAgLy8gZHJhZ01vZGUgc2F2ZXMgZXZlbnRzIGFuZCB0aGVuIHJl
cGxheXMgdGhlbSBsYXRlci4gV2UgZG9uJ3QgbmVlZC93YW50IHRoYXQuCiAgICAgZHJhZ01vZGUu
c2V0KGZhbHNlKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0V2ZW50U2VuZGVyLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9F
dmVudFNlbmRlci5oCmluZGV4IGFjNDc1YTMuLjE4NjM2MGYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmgKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuaApAQCAtNDYsNyArNDYsNiBA
QAogY2xhc3MgVGVzdFNoZWxsOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkRyYWdE
YXRhOwogY2xhc3MgV2ViVmlldzsKIH0KIApAQCAtNjAsNyArNTksNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCByZXNldCgpOwogCiAgICAgLy8gU2ltdWxhdGUgZHJhZyZkcm9wIHN5c3RlbSBjYWxsLgot
ICAgIHZvaWQgZG9EcmFnRHJvcChjb25zdCBXZWJLaXQ6OldlYkRyYWdEYXRhJiwgV2ViS2l0OjpX
ZWJEcmFnT3BlcmF0aW9uc01hc2spOworICAgIHZvaWQgZG9EcmFnRHJvcChXZWJLaXQ6OldlYkRy
YWdPcGVyYXRpb25zTWFzayk7CiAKICAgICAvLyBKUyBjYWxsYmFjayBtZXRob2RzLgogICAgIHZv
aWQgbW91c2VEb3duKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNw
cCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApp
bmRleCBhMTQ1YmY5Li42MDg3YzU3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVk
ZSAicHVibGljL1dlYldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZv
cm1fY2FudmFzLmgiCiAjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIK
KyNpbmNsdWRlICJ3ZWJraXQvdG9vbHMvdGVzdF9zaGVsbC9tb2NrX3dlYmNsaXBib2FyZF9pbXBs
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogCkBAIC0xMjEsOSArMTIyLDkgQEAgc3RhdGljIHN0cmluZyBkZXNjcmlwdGlvblN1aXRh
YmxlRm9yVGVzdFJlc3VsdChjb25zdCBzdHJpbmcmIHVybCkKIAogLy8gQWRkcyBhIGZpbGUgY2Fs
bGVkICJEUlRGYWtlRmlsZSIgdG8gfGRhdGFfb2JqZWN0fCAoQ0ZfSERST1ApLiAgVXNlIHRvIGZh
a2UKIC8vIGRyYWdnaW5nIGEgZmlsZS4KLXN0YXRpYyB2b2lkIGFkZERSVEZha2VGaWxlVG9EYXRh
T2JqZWN0KFdlYkRyYWdEYXRhKiBkcmFnRGF0YSkKK3N0YXRpYyB2b2lkIGFkZERSVEZha2VGaWxl
VG9EYXRhT2JqZWN0KCkKIHsKLSAgICBkcmFnRGF0YS0+YXBwZW5kVG9GaWxlTmFtZXMoV2ViU3Ry
aW5nOjpmcm9tVVRGOCgiRFJURmFrZUZpbGUiKSk7CisgICAgTW9ja1dlYkNsaXBib2FyZEltcGw6
OmFkZEZpbGVUb0RyYWcoV2ViU3RyaW5nOjpmcm9tVVRGOCgiRFJURmFrZUZpbGUiKSk7CiB9CiAK
IC8vIEdldCBhIGRlYnVnZ2luZyBzdHJpbmcgZnJvbSBhIFdlYk5hdmlnYXRpb25UeXBlLgpAQCAt
NDU1LDE3ICs0NTYsMjEgQEAgdm9pZCBXZWJWaWV3SG9zdDo6c2V0U3RhdHVzVGV4dChjb25zdCBX
ZWJTdHJpbmcmIHRleHQpCiAgICAgcHJpbnRmKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJBQ0s6
IHNldFN0YXR1c1RleHQ6JXNcbiIsIHRleHQudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgV2Vi
Vmlld0hvc3Q6OnN0YXJ0RHJhZ2dpbmcoY29uc3QgV2ViRHJhZ0RhdGEmIGRhdGEsIFdlYkRyYWdP
cGVyYXRpb25zTWFzayBtYXNrLCBjb25zdCBXZWJJbWFnZSYsIGNvbnN0IFdlYlBvaW50JikKK3Zv
aWQgV2ViVmlld0hvc3Q6OnN0YXJ0RHJhZ2dpbmcoY29uc3QgV2ViRHJhZ0RhdGEmIGRyYWdEYXRh
LCBXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaywgY29uc3QgV2ViSW1hZ2UmLCBjb25zdCBXZWJQ
b2ludCYpCiB7Ci0gICAgV2ViRHJhZ0RhdGEgbXV0YWJsZURyYWdEYXRhID0gZGF0YTsKKyAgICBN
b2NrV2ViQ2xpcGJvYXJkSW1wbDo6cmVzZXREcmFnRGF0YSgpOworICAgIFdlYlZlY3RvcjxXZWJT
dHJpbmc+IHR5cGVzOworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IGRhdGE7CisgICAgZHJhZ0Rh
dGEuZGF0YU1hcCh0eXBlcywgZGF0YSk7CisgICAgTW9ja1dlYkNsaXBib2FyZEltcGw6OnNldERy
YWdEYXRhTWFwKHR5cGVzLCBkYXRhKTsKICAgICBpZiAobGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+
c2hvdWxkQWRkRmlsZVRvUGFzdGVib2FyZCgpKSB7CiAgICAgICAgIC8vIEFkZCBhIGZpbGUgY2Fs
bGVkIERSVEZha2VGaWxlIHRvIHRoZSBkcmFnJmRyb3AgY2xpcGJvYXJkLgotICAgICAgICBhZGRE
UlRGYWtlRmlsZVRvRGF0YU9iamVjdCgmbXV0YWJsZURyYWdEYXRhKTsKKyAgICAgICAgYWRkRFJU
RmFrZUZpbGVUb0RhdGFPYmplY3QoKTsKICAgICB9CiAKICAgICAvLyBXaGVuIHJ1bm5pbmcgYSB0
ZXN0LCB3ZSBuZWVkIHRvIGZha2UgYSBkcmFnIGRyb3Agb3BlcmF0aW9uIG90aGVyd2lzZQogICAg
IC8vIFdpbmRvd3Mgd2FpdHMgZm9yIHJlYWwgbW91c2UgZXZlbnRzIHRvIGtub3cgd2hlbiB0aGUg
ZHJhZyBpcyBvdmVyLgotICAgIG1fc2hlbGwtPmV2ZW50U2VuZGVyKCktPmRvRHJhZ0Ryb3AobXV0
YWJsZURyYWdEYXRhLCBtYXNrKTsKKyAgICBtX3NoZWxsLT5ldmVudFNlbmRlcigpLT5kb0RyYWdE
cm9wKG1hc2spOwogfQogCiB2b2lkIFdlYlZpZXdIb3N0OjpuYXZpZ2F0ZUJhY2tGb3J3YXJkU29v
bihpbnQgb2Zmc2V0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65977</attachid>
            <date>2010-08-30 16:26:12 -0700</date>
            <delta_ts>2010-08-30 17:25:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-44727-20100830162610.patch</filename>
            <type>text/plain</type>
            <size>81162</size>
            <attacher name="Daniel Cheng">dcheng</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWJkZGVhOGNjYzY1NDhjOGNiZjc5NGMwMmNmY2NkODE1ZTQxMTdhZS4uNzdkMzMxMjI2YjdjZTMy
ZTIzN2JmN2YzY2ZkZjZlNGFmNjkwMTYzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDcgQEAKKzIwMTAtMDgtMzAgIERh
bmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgc3VwcG9ydCBmb3Igbm9u
LXRleHQvbm9uLVVSTCB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNmZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzI3CisKKyAgICAgICAgUmVmYWN0
b3IgQ2hyb21pdW1EYXRhT2JqZWN0IGFuZCBDbGlwYm9hcmRDaHJvbWl1bSB0byB0byB1c2UgbmV3
CisgICAgICAgIFdlYkNsaXBib2FyZCBtZXRob2RzLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRv
IHVzZSBub24tdGV4dC9ub24tVVJMCisgICAgICAgIHR5cGVzIHdpdGggZXZlbnQuZGF0YVRyYW5z
ZmVyLiBOb3RlIHRoYXQgaGFuZGxpbmcgZm9yIGNvcHkvcGFzdGUgYW5kCisgICAgICAgIGRyYWcv
ZHJvcCBpcyBzdGlsbCBzb21ld2hhdCBmcmFjdHVyZWQgYXQgdGhlIG1vbWVudCwgbGVhZGluZyB0
byBzb21lCisgICAgICAgIGR1cGxpY2F0aW9uIG9mIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGVkaXRpbmcvY2hyb21p
dW0vRWRpdG9yQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpuZXdHZW5l
cmFsQ2xpcGJvYXJkKToKKyAgICAgICAgKiBwYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdD
bGlwYm9hcmQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9ybWFsaXplVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDbGlwYm9hcmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1
bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpjbGVhckRh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OmdldERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06OnR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBi
b2FyZENocm9taXVtOjpmaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUltYWdlVG9EYXRh
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjpkZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkQ2hyb21pdW06Ondy
aXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVJhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZENocm9taXVtOjp3cml0ZVBsYWluVGV4dCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDbGlwYm9hcmRDaHJvbWl1bTo6dmFsaWRhdGVGaWxlTmFtZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb250YWluc0hUTUwpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5z
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6CisgICAgICAgIChXZWJD
b3JlOjpEcmFnRGF0YTo6Y29udGFpbnNGaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpEcmFnRGF0
YTo6YXNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmNvbnRhaW5zUGxh
aW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1BsYWluVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9S
ZWFkYWJsZURhdGFPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsaXBib2Fy
ZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVEYXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmpl
Y3Q6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0VVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFkYWJsZURhdGFPYmplY3Q6OnNldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVE
YXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRh
T2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0
OjpkYXRhTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6dXJsVGl0
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVSTCk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVFeHRlbnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudEZpbGVuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxl
bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OldyaXRhYmxlRGF0YU9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMp
OgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6Omhhc0RhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6V3JpdGFibGVEYXRhT2JqZWN0Ojp0eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJs
ZURhdGFPYmplY3Q6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2Jq
ZWN0OjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Z2V0
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0VVJMKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6Z2V0SFRNTCk6CisgICAgICAgIChX
ZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNldEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGFibGVEYXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6V3Jp
dGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVE
YXRhT2JqZWN0OjpkYXRhTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVj
dDo6dXJsVGl0bGUpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpodG1s
QmFzZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OmZpbGVFeHRl
bnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVu
dEZpbGVuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6ZmlsZUNv
bnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGFibGVEYXRhT2JqZWN0OjpzZXRGaWxlRXh0
ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNv
bnRlbnRGaWxlbmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFPYmplY3Q6OnNl
dEZpbGVDb250ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFP
YmplY3QuaDogQWRkZWQuCisKIDIwMTAtMDgtMzAgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXgg
ZTViNTdiYTA4ZTNhMDBkOGQ1OThjZDJiZTQwNzNkNzBhOWEwYmRmNy4uMzU1NzZhODFmNGMzM2I1
YzY4MDFhMGY1YjRiMzFiM2I4NmIzOGUzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTIxMzgsNyArMjEzOCw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2NmL1NoYXJlZEJ1ZmZlckNGLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vQ2hyb21pdW1CcmlkZ2UuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1EYXRhT2JqZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBi
b2FyZENocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW0uaCcsCkBAIC0yMTgyLDYgKzIxODEsOCBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vUG9wdXBNZW51UHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21p
dW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oJywKQEAgLTIyMDIsNiArMjIwMyw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0uY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1BhdGguaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9j
aHJvbWl1bS9FZGl0b3JDaHJvbWl1bS5jcHAKaW5kZXggN2ExM2IxMmIzYzQxYzI3NjFhN2VkMDJm
Zjc3NTU1Zjc1M2NjYmE2Yy4uZWQ0Y2YzNjkyMTY4OWU2ODQ1NGVjYjhhNTQ1M2JlMzI0OGJhMTZj
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL2Nocm9taXVtL0VkaXRvckNocm9taXVtLmNw
cAorKysgYi9XZWJDb3JlL2VkaXRpbmcvY2hyb21pdW0vRWRpdG9yQ2hyb21pdW0uY3BwCkBAIC0z
OSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxDbGlwYm9hcmQ+
IEVkaXRvcjo6bmV3R2VuZXJhbENsaXBib2FyZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5
LCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUo
ZmFsc2UsIENocm9taXVtRGF0YU9iamVjdDo6Y3JlYXRlKCksIHBvbGljeSwgZnJhbWUpOworICAg
IHJldHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKGZhbHNlLCBwb2xpY3ksIGZyYW1lKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL2No
cm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNwcCBiL1dlYkNvcmUvcGFnZS9jaHJvbWl1bS9F
dmVudEhhbmRsZXJDaHJvbWl1bS5jcHAKaW5kZXggNzE5MTYzZjVmOGYwNmM0Y2VhYmQwNzM5ZGU0
MzBlYTA2NmFhNjVhMi4uN2EzODBmNjNmNWQ3YTlhODk5Y2Q5MmZkM2RjNGZlNjQwNWFmNzEzYiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL2Nocm9taXVtL0V2ZW50SGFuZGxlckNocm9taXVtLmNw
cAorKysgYi9XZWJDb3JlL3BhZ2UvY2hyb21pdW0vRXZlbnRIYW5kbGVyQ2hyb21pdW0uY3BwCkBA
IC0xMjgsOCArMTI4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KSBjb25zdAogCiBQYXNzUmVmUHRyPENsaXBi
b2FyZD4gRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPENocm9taXVtRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IENocm9taXVtRGF0YU9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgcmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUodHJ1
ZSwgZGF0YU9iamVjdC5nZXQoKSwgQ2xpcGJvYXJkV3JpdGFibGUsIG1fZnJhbWUpOworICAgIHJl
dHVybiBDbGlwYm9hcmRDaHJvbWl1bTo6Y3JlYXRlKHRydWUsIENsaXBib2FyZFdyaXRhYmxlLCBt
X2ZyYW1lKTsKIH0KIAogdm9pZCBFdmVudEhhbmRsZXI6OmZvY3VzRG9jdW1lbnRWaWV3KCkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM1MjY2OTk2NzNkYmRhYTgwNGY2NzNiY2YzZGQ5
ZjBiOGZlOTkzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqIAotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12
b2lkIENocm9taXVtRGF0YU9iamVjdDo6Y2xlYXIoKQotewotICAgIGNsZWFyQWxsRXhjZXB0Rmls
ZXMoKTsKLSAgICBmaWxlbmFtZXMuY2xlYXIoKTsKLX0KLQotdm9pZCBDaHJvbWl1bURhdGFPYmpl
Y3Q6OmNsZWFyQWxsRXhjZXB0RmlsZXMoKQotewotICAgIHVybCA9IEtVUkwoKTsKLSAgICB1cmxU
aXRsZSA9ICIiOwotICAgIHVyaUxpc3QuY2xlYXIoKTsKLSAgICBkb3dubG9hZE1ldGFkYXRhID0g
IiI7Ci0gICAgZmlsZUV4dGVuc2lvbiA9ICIiOwotICAgIHBsYWluVGV4dCA9ICIiOwotICAgIHRl
eHRIdG1sID0gIiI7Ci0gICAgaHRtbEJhc2VVcmwgPSBLVVJMKCk7Ci0gICAgZmlsZUNvbnRlbnRG
aWxlbmFtZSA9ICIiOwotICAgIGlmIChmaWxlQ29udGVudCkKLSAgICAgICAgZmlsZUNvbnRlbnQt
PmNsZWFyKCk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1EYXRhT2JqZWN0OjpoYXNEYXRhKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gIXVybC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXVyaUxpc3QuaXNFbXB0
eSgpCi0gICAgICAgIHx8ICFkb3dubG9hZE1ldGFkYXRhLmlzRW1wdHkoKQotICAgICAgICB8fCAh
ZmlsZUV4dGVuc2lvbi5pc0VtcHR5KCkKLSAgICAgICAgfHwgIWZpbGVuYW1lcy5pc0VtcHR5KCkK
LSAgICAgICAgfHwgIXBsYWluVGV4dC5pc0VtcHR5KCkKLSAgICAgICAgfHwgIXRleHRIdG1sLmlz
RW1wdHkoKQotICAgICAgICB8fCBmaWxlQ29udGVudDsKLX0KLQotQ2hyb21pdW1EYXRhT2JqZWN0
OjpDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21pdW1EYXRhT2JqZWN0JiBvdGhlcikKLSAg
ICA6IFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PigpCi0gICAgLCB1cmxUaXRsZShvdGhl
ci51cmxUaXRsZSkKLSAgICAsIGRvd25sb2FkTWV0YWRhdGEob3RoZXIuZG93bmxvYWRNZXRhZGF0
YSkKLSAgICAsIGZpbGVFeHRlbnNpb24ob3RoZXIuZmlsZUV4dGVuc2lvbikKLSAgICAsIGZpbGVu
YW1lcyhvdGhlci5maWxlbmFtZXMpCi0gICAgLCBwbGFpblRleHQob3RoZXIucGxhaW5UZXh0KQot
ICAgICwgdGV4dEh0bWwob3RoZXIudGV4dEh0bWwpCi0gICAgLCBodG1sQmFzZVVybChvdGhlci5o
dG1sQmFzZVVybCkKLSAgICAsIGZpbGVDb250ZW50RmlsZW5hbWUob3RoZXIuZmlsZUNvbnRlbnRG
aWxlbmFtZSkKLSAgICAsIHVybChvdGhlci51cmwpCi0gICAgLCB1cmlMaXN0KG90aGVyLnVyaUxp
c3QpCi17Ci0gICAgaWYgKG90aGVyLmZpbGVDb250ZW50LmdldCgpKQotICAgICAgICBmaWxlQ29u
dGVudCA9IG90aGVyLmZpbGVDb250ZW50LT5jb3B5KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdC5o
CmluZGV4IGFmMGEzZmE2NTgxZDI2Y2QzYjdjNWFmNDhmZTI1MmE3NWJkMTY3NzYuLjcxMjI0YTBm
ODViNjQ2YmQ2MDU1NGE2OTdiYmY3YThmZWU2MTIxMjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3QuaApAQCAtMzQsOCArMzQsMTEgQEAKICNpbmNs
dWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDQsNzAgKzQ3LDM3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBvZiBhbmQg
aXMgbm90IHNwZWNpZmljIHRvIGEgcGxhdGZvcm0uCiAgICAgY2xhc3MgQ2hyb21pdW1EYXRhT2Jq
ZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2hyb21pdW1EYXRhT2JqZWN0PiB7CiAgICAgcHVibGlj
OgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaHJvbWl1bURhdGFPYmplY3Q+IGNyZWF0ZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hyb21pdW1EYXRh
T2JqZWN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2Jq
ZWN0PiBjb3B5KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDaHJvbWl1bURhdGFPYmplY3QoKnRoaXMpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgY2xlYXIoKTsKLSAgICAgICAgdm9pZCBjbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAg
IGJvb2wgaGFzRGF0YSgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgY2xlYXJVUkwoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1cmwgPSBLVVJMKCk7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFy
KCk7Ci0gICAgICAgICAgICB1cmxUaXRsZSA9ICIiOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9v
bCBoYXNWYWxpZFVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB1cmwu
aXNWYWxpZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgS1VSTCBnZXRVUkwoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdXJsOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRVUkwoY29uc3QgS1VSTCYgbmV3VVJMKQotICAgICAgICB7Ci0gICAgICAgICAgICB1cmwg
PSBuZXdVUkw7Ci0gICAgICAgICAgICB1cmlMaXN0LmNsZWFyKCk7Ci0gICAgICAgICAgICBpZiAo
bmV3VVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB1
cmlMaXN0LmFwcGVuZChuZXdVUkwuc3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3Ry
aW5nIHVybFRpdGxlOwotCi0gICAgICAgIFN0cmluZyBkb3dubG9hZE1ldGFkYXRhOwotCi0gICAg
ICAgIFN0cmluZyBmaWxlRXh0ZW5zaW9uOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFt
ZXM7Ci0KLSAgICAgICAgU3RyaW5nIHBsYWluVGV4dDsKLQotICAgICAgICBTdHJpbmcgdGV4dEh0
bWw7Ci0gICAgICAgIEtVUkwgaHRtbEJhc2VVcmw7Ci0KLSAgICAgICAgU3RyaW5nIGZpbGVDb250
ZW50RmlsZW5hbWU7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50Owot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gVVJMIGFuZCB1cmktbGlzdCBhcmUgbGlua2VkLCBz
byB0aGV5IHNob3VsZCBub3QgYmUgYWNjZXNzZWQgaW5kaXZpZHVhbGx5LgotICAgICAgICBLVVJM
IHVybDsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gdXJpTGlzdDsKLQotICAgICAgICBDaHJvbWl1
bURhdGFPYmplY3QoKSB7fQotICAgICAgICBDaHJvbWl1bURhdGFPYmplY3QoY29uc3QgQ2hyb21p
dW1EYXRhT2JqZWN0Jik7Ci0KLSAgICAgICAgZnJpZW5kIGNsYXNzIENsaXBib2FyZENocm9taXVt
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFeGNlcHRGaWxlcygpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0
YSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBIYXNoU2V0PFN0cmluZz4gdHlwZXMoKSBj
b25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIHNl
dERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpID0gMDsKKworICAg
ICAgICAvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJMIGFuZCBIVE1MIHNpbmNlIHRoZXkgY2Fy
cnkgYWRkaXRpb25hbAorICAgICAgICAvLyBtZXRhZGF0YS4KKyAgICAgICAgdmlydHVhbCBTdHJp
bmcgZ2V0VVJMKFN0cmluZyogdGl0bGUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lk
IHNldFVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkgPSAwOworICAg
ICAgICB2aXJ0dWFsIFN0cmluZyBnZXRIVE1MKFN0cmluZyogYmFzZVVSTCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIGNvbnN0IEtV
UkwmIGJhc2VVUkwpID0gMDsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkg
Y29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcygpIGNv
bnN0ID0gMDsKKworICAgICAgICAvLyBBY2Nlc3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBk
cmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlCisgICAgICAgIC8vIGJyb3dzZXIuCisg
ICAgICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YU1hcCgpIGNvbnN0ID0g
MDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgdXJsVGl0bGUoKSBjb25zdCA9IDA7CisgICAgICAg
IHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0ID0gMDsKKworICAgICAgICAvLyBVc2Vk
IGZvciB0cmFuc2ZlcnJpbmcgZmlsZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBicm93
c2VyLgorICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVudEZpbGVuYW1lKCkgY29uc3QgPSAwOwor
ICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCgpIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShj
b25zdCBTdHJpbmcmKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlQ29udGVudChQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pID0gMDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0u
Y3BwCmluZGV4IDIzNTA4YTY5Nzg3ODZlY2QzOTNmMjQ5YTAwZDgyMTNjZDM2MTkwMzIuLjY0Yzkz
YmFmYzlmYjk2OTQ5OTQ3OTdhMTAyMjg5MmY4YmRlNzIyZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCkBAIC00Myw1NyArNDMsNTEgQEAK
ICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNp
bmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgog
I2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFPYmplY3Qu
aCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCi0vLyBXZSBwcm92aWRlIHRoZSBJRSBjbGlwYm9hcmQgdHlw
ZXMgKFVSTCBhbmQgVGV4dCksIGFuZCB0aGUgY2xpcGJvYXJkIHR5cGVzIHNwZWNpZmllZCBpbiB0
aGUgV0hBVFdHIFdlYiBBcHBsaWNhdGlvbnMgMS4wIGRyYWZ0Ci0vLyBzZWUgaHR0cDovL3d3dy53
aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8gU2VjdGlvbiA2LjMuNS4zCi0K
LWVudW0gQ2xpcGJvYXJkRGF0YVR5cGUgewotICAgIENsaXBib2FyZERhdGFUeXBlTm9uZSwKLQot
ICAgIENsaXBib2FyZERhdGFUeXBlVVJMLAotICAgIENsaXBib2FyZERhdGFUeXBlVVJJTGlzdCwK
LSAgICBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMLAotICAgIENsaXBib2FyZERhdGFUeXBl
UGxhaW5UZXh0LAotICAgIENsaXBib2FyZERhdGFUeXBlSFRNTCwKLQotICAgIENsaXBib2FyZERh
dGFUeXBlT3RoZXIsCi19OwotCiAvLyBQZXIgUkZDIDI0ODMsIHRoZSBsaW5lIHNlcGFyYXRvciBm
b3IgInRleHQvLi4uIiBNSU1FIHR5cGVzIGlzIENSLUxGLgogc3RhdGljIGNoYXIgY29uc3QqIGNv
bnN0IHRleHRNSU1FVHlwZUxpbmVTZXBhcmF0b3IgPSAiXHJcbiI7CiAKLXN0YXRpYyBDbGlwYm9h
cmREYXRhVHlwZSBjbGlwYm9hcmRUeXBlRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkK
K3N0YXRpYyBTdHJpbmcgbm9ybWFsaXplVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAg
U3RyaW5nIGNsZWFuVHlwZSA9IHR5cGUuc3RyaXBXaGl0ZVNwYWNlKCkubG93ZXIoKTsKLSAgICBp
ZiAoY2xlYW5UeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBl
Tm9uZTsKLQotICAgIC8vIEluY2x1ZGVzIHR3byBzcGVjaWFsIGNhc2VzIGZvciBJRSBjb21wYXRp
YmlsaXR5LgotICAgIGlmIChjbGVhblR5cGUgPT0gInRleHQiIHx8IGNsZWFuVHlwZSA9PSAidGV4
dC9wbGFpbiIgfHwgY2xlYW5UeXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47IikpCi0gICAgICAg
IHJldHVybiBDbGlwYm9hcmREYXRhVHlwZVBsYWluVGV4dDsKLSAgICBpZiAoY2xlYW5UeXBlID09
ICJ1cmwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVVUkw7Ci0gICAgaWYgKGNs
ZWFuVHlwZSA9PSAidGV4dC91cmktbGlzdCIpCi0gICAgICAgIHJldHVybiBDbGlwYm9hcmREYXRh
VHlwZVVSSUxpc3Q7Ci0gICAgaWYgKGNsZWFuVHlwZSA9PSAiZG93bmxvYWR1cmwiKQotICAgICAg
ICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVEb3dubG9hZFVSTDsKLSAgICBpZiAoY2xlYW5UeXBl
ID09ICJ0ZXh0L2h0bWwiKQotICAgICAgICByZXR1cm4gQ2xpcGJvYXJkRGF0YVR5cGVIVE1MOwot
Ci0gICAgcmV0dXJuIENsaXBib2FyZERhdGFUeXBlT3RoZXI7CisgICAgY29uc3QgU3RyaW5nIG5v
cm1hbGl6ZWRUeXBlID0gdHlwZS5zdHJpcFdoaXRlU3BhY2UoKS5sb3dlcigpOworICAgIGlmIChu
b3JtYWxpemVkVHlwZSA9PSAidGV4dCIpCisgICAgICAgIHJldHVybiAidGV4dC9wbGFpbiI7Cisg
ICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09ICJ1cmwiKQorICAgICAgICByZXR1cm4gInRleHQvdXJp
LWxpc3QiOworICAgIHJldHVybiBub3JtYWxpemVkVHlwZTsKK30KKworUGFzc1JlZlB0cjxDbGlw
Ym9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKAorICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xp
Y3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQoreworICAgIHJldHVybiBDbGlw
Ym9hcmRDaHJvbWl1bTo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEsIGZyYW1lKTsKIH0KIAotUGFz
c1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQorUGFzc1JlZlB0cjxD
bGlwYm9hcmQ+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoCisgICAgQ2xpcGJvYXJkQWNjZXNz
UG9saWN5IHBvbGljeSwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAg
cmV0dXJuIENsaXBib2FyZENocm9taXVtOjpjcmVhdGUodHJ1ZSwgZHJhZ0RhdGEtPnBsYXRmb3Jt
RGF0YSgpLCBwb2xpY3ksIGZyYW1lKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENsaXBib2Fy
ZENocm9taXVtKHRydWUsIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSwgcG9saWN5LCBmcmFtZSkp
OworfQorCitQYXNzUmVmUHRyPENsaXBib2FyZD4gQ2xpcGJvYXJkQ2hyb21pdW06OmNyZWF0ZSgK
KyAgICBib29sIGlzRm9yRHJhZ2dpbmcsIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRhT2JqZWN0
OworICAgIGlmIChwb2xpY3kgPT0gQ2xpcGJvYXJkV3JpdGFibGUgfHwgcG9saWN5ID09IENsaXBi
b2FyZEltYWdlV3JpdGFibGUpCisgICAgICAgIGRhdGFPYmplY3QgPSBXcml0YWJsZURhdGFPYmpl
Y3Q6OmNyZWF0ZShpc0ZvckRyYWdnaW5nKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGFPYmplY3Qg
PSBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShpc0ZvckRyYWdnaW5nKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENsaXBib2FyZENocm9taXVtKGlzRm9yRHJhZ2dpbmcsIGRhdGFPYmplY3Qs
IHBvbGljeSwgZnJhbWUpKTsKIH0KIAogQ2xpcGJvYXJkQ2hyb21pdW06OkNsaXBib2FyZENocm9t
aXVtKGJvb2wgaXNGb3JEcmFnZ2luZywKQEAgLTEwNiw0OSArMTAwLDE2IEBAIENsaXBib2FyZENo
cm9taXVtOjpDbGlwYm9hcmRDaHJvbWl1bShib29sIGlzRm9yRHJhZ2dpbmcsCiB7CiB9CiAKLVBh
c3NSZWZQdHI8Q2xpcGJvYXJkQ2hyb21pdW0+IENsaXBib2FyZENocm9taXVtOjpjcmVhdGUoYm9v
bCBpc0ZvckRyYWdnaW5nLAotICAgIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiBkYXRh
T2JqZWN0LCBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFtZSogZnJhbWUpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRDaHJvbWl1bShpc0ZvckRyYWdnaW5nLCBk
YXRhT2JqZWN0LCBwb2xpY3ksIGZyYW1lKSk7Ci19Ci0KIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06
OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgaWYgKHBvbGljeSgpICE9IENs
aXBib2FyZFdyaXRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAg
IENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21NSU1FVHlwZSh0
eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZU5vbmU6Ci0gICAgICAgIC8vIElmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cywgZXZlcnl0aGlu
ZyBleGNlcHQgdGhlIGZpbGUgbGlzdCBtdXN0IGJlIGNsZWFyZWQuCi0gICAgICAgIC8vIChTZWUg
SFRNTDUgc3BlYywgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikK
LSAgICAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbEV4Y2VwdEZpbGVzKCk7Ci0gICAgICAgIHJl
dHVybjsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZVVSSUxpc3Q6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJVUkwoKTsKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOgot
ICAgICAgICBtX2RhdGFPYmplY3QtPmRvd25sb2FkTWV0YWRhdGEgPSAiIjsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlUGxhaW5UZXh0OgotICAg
ICAgICBtX2RhdGFPYmplY3QtPnBsYWluVGV4dCA9ICIiOwotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjYXNlIENsaXBib2FyZERhdGFUeXBlSFRNTDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT50ZXh0
SHRtbCA9ICIiOwotICAgICAgICBtX2RhdGFPYmplY3QtPmh0bWxCYXNlVXJsID0gS1VSTCgpOwot
ICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAg
ICAgIC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIGNvbnN0IFN0cmluZyBjbGVhblR5cGUgPSBub3JtYWxpemVU
eXBlKHR5cGUpOworICAgIGlmIChjbGVhblR5cGUuaXNFbXB0eSgpKQorICAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgZWxzZQorICAgICAgbV9kYXRhT2JqZWN0
LT5jbGVhckRhdGEodHlwZSk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OmNsZWFyQWxs
RGF0YSgpCkBAIC0xNjUsODQgKzEyNiw3IEBAIFN0cmluZyBDbGlwYm9hcmRDaHJvbWl1bTo6Z2V0
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2Nlc3MpIGNvbnN0CiAgICAgaWYgKHBv
bGljeSgpICE9IENsaXBib2FyZFJlYWRhYmxlIHx8ICFtX2RhdGFPYmplY3QpCiAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAotICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJv
YXJkVHlwZUZyb21NSU1FVHlwZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAg
Y2FzZSBDbGlwYm9hcmREYXRhVHlwZU5vbmU6Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQot
ICAgIC8vIEhhY2sgZm9yIFVSTHMuIGZpbGUgVVJMcyBhcmUgdXNlZCBpbnRlcm5hbGx5IGZvciBk
cm9wJ3MgZGVmYXVsdCBhY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gZXhwb3Nl
IHRoZW0gdG8gdGhlIHBhZ2UsIHNvIHdlIGZpbHRlciB0aGVtIG91dCBoZXJlLgotICAgIGNhc2Ug
Q2xpcGJvYXJkRGF0YVR5cGVVUklMaXN0OgotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcg
dGV4dDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0LT51
cmlMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB1cmkg
PSBtX2RhdGFPYmplY3QtPnVyaUxpc3RbaV07Ci0gICAgICAgICAgICAgICAgaWYgKHByb3RvY29s
SXModXJpLCAiZmlsZSIpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIXVyaS5pc0VtcHR5KCkpOwotICAgICAgICAgICAgICAgIGlmICghdGV4
dC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRleHQuYXBwZW5kKHRleHRNSU1FVHlw
ZUxpbmVTZXBhcmF0b3IpOwotICAgICAgICAgICAgICAgIC8vIFVSSXMgaGF2ZSBhbHJlYWR5IGJl
ZW4gY2Fub25pY2FsaXplZCwgc28gY29weSBldmVyeXRoaW5nIHZlcmJhdGltLgotICAgICAgICAg
ICAgICAgIHRleHQuYXBwZW5kKHVyaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdWNj
ZXNzID0gIXRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgICAg
IH0KLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIC8vIEluIGNhc2Ug
b2YgYSBwcmV2aW91cyBzZXREYXRhKCd0ZXh0L3VyaS1saXN0JyksIHNldERhdGEoKSBoYXMgYWxy
ZWFkeQotICAgICAgICAvLyBwcmVwYXJlZCB0aGUgJ3VybCcgbWVtYmVyLCBzbyB3ZSBjYW4ganVz
dCByZXRyaWV2ZSBpdCBoZXJlLgotICAgICAgICBpZiAoIW1fZGF0YU9iamVjdC0+dXJsLmlzRW1w
dHkoKSAmJiAhbV9kYXRhT2JqZWN0LT51cmwuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICAgICAg
c3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT51cmwuc3Ry
aW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgY2FzZSBD
bGlwYm9hcmREYXRhVHlwZURvd25sb2FkVVJMOgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0YU9i
amVjdC0+ZG93bmxvYWRNZXRhZGF0YS5pc0VtcHR5KCk7Ci0gICAgICAgIHJldHVybiBtX2RhdGFP
YmplY3QtPmRvd25sb2FkTWV0YWRhdGE7Ci0gICAgCi0gICAgY2FzZSBDbGlwYm9hcmREYXRhVHlw
ZVBsYWluVGV4dDoKLSAgICAgICAgaWYgKCFpc0ZvckRyYWdnaW5nKCkpIHsKLSAgICAgICAgICAg
IC8vIElmIHRoaXMgaXNuJ3QgZm9yIGEgZHJhZywgaXQncyBmb3IgYSBjdXQvcGFzdGUgZXZlbnQg
aGFuZGxlci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBjaGVjayB0
aGUgY2xpcGJvYXJkLgotICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciBidWZmZXIgPSAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpnZW5lcmFsUGFzdGVi
b2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAgUGFzdGVib2FyZFBy
aXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6IAotICAgICAgICAgICAgICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyB0ZXh0ID0gQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKLSAgICAgICAgICAgIHN1Y2Nl
c3MgPSAhdGV4dC5pc0VtcHR5KCk7Ci0gICAgICAgICAgICByZXR1cm4gdGV4dDsKLSAgICAgICAg
fQotICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIHdoYXRldmVyIGlzIHN0b3JlZCBpbiBwbGFp
blRleHQuCi0gICAgICAgIHN1Y2Nlc3MgPSAhbV9kYXRhT2JqZWN0LT5wbGFpblRleHQuaXNFbXB0
eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0LT5wbGFpblRleHQ7Ci0KLSAgICBjYXNl
IENsaXBib2FyZERhdGFUeXBlSFRNTDoKLSAgICAgICAgaWYgKCFpc0ZvckRyYWdnaW5nKCkpIHsK
LSAgICAgICAgICAgIC8vIElmIHRoaXMgaXNuJ3QgZm9yIGEgZHJhZywgaXQncyBmb3IgYSBjdXQv
cGFzdGUgZXZlbnQgaGFuZGxlci4KLSAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgbmVl
ZCB0byBjaGVjayB0aGUgY2xpcGJvYXJkLgotICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPSAKLSAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkOjpn
ZW5lcmFsUGFzdGVib2FyZCgpLT5pc1NlbGVjdGlvbk1vZGUoKSA/Ci0gICAgICAgICAgICAgICAg
UGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6IAotICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyBodG1s
VGV4dDsKLSAgICAgICAgICAgIEtVUkwgc291cmNlVVJMOwotICAgICAgICAgICAgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsK
LSAgICAgICAgICAgIHN1Y2Nlc3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwotICAgICAgICAgICAg
cmV0dXJuIGh0bWxUZXh0OwotICAgICAgICB9Ci0gICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4g
d2hhdGV2ZXIgaXMgc3RvcmVkIGluIHRleHRIdG1sLgotICAgICAgICBzdWNjZXNzID0gIW1fZGF0
YU9iamVjdC0+dGV4dEh0bWwuaXNFbXB0eSgpOwotICAgICAgICByZXR1cm4gbV9kYXRhT2JqZWN0
LT50ZXh0SHRtbDsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5cGVPdGhlcjoKLSAgICAgICAg
Ly8gbm90IHlldCBpbXBsZW1lbnRlZCwgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNDQxMAotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgfQotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBt
X2RhdGFPYmplY3QtPmdldERhdGEobm9ybWFsaXplVHlwZSh0eXBlKSwgc3VjY2Vzcyk7CiB9CiAK
IGJvb2wgQ2xpcGJvYXJkQ2hyb21pdW06OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25z
dCBTdHJpbmcmIGRhdGEpCkBAIC0yNTAsMTEwICsxMzQsMTkgQEAgYm9vbCBDbGlwYm9hcmRDaHJv
bWl1bTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAg
ICBpZiAocG9saWN5KCkgIT0gQ2xpcGJvYXJkV3JpdGFibGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIENsaXBib2FyZERhdGFUeXBlIGRhdGFUeXBlID0gY2xpcGJvYXJkVHlwZUZyb21N
SU1FVHlwZSh0eXBlKTsKLSAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7Ci0gICAgY2FzZSBDbGlwYm9h
cmREYXRhVHlwZU5vbmU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNhc2UgQ2xpcGJv
YXJkRGF0YVR5cGVVUkw6Ci0gICAgICAgIC8vIEZvciBzZXREYXRhKCksICJVUkwiIG11c3QgYmUg
dHJlYXRlZCBhcyAidGV4dC91cmktbGlzdCIuCi0gICAgICAgIC8vIChTZWUgSFRNTDUgc3BlYywg
IlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBpbnRlcmZhY2VzIikKLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlVVJJTGlzdDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT51cmwgPSBLVVJM
KCk7Ci0gICAgICAgIC8vIExpbmUgc2VwYXJhdG9yIGlzIFxyXG4gcGVyIFJGQyAyNDgzIC0gaG93
ZXZlciwgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucwotICAgICAgICAvLyB3ZSBhbHNvIGFsbG93
IGp1c3QgXG4gaGVyZS4gCi0gICAgICAgIGRhdGEuc3BsaXQoJ1xuJywgbV9kYXRhT2JqZWN0LT51
cmlMaXN0KTsKLSAgICAgICAgLy8gU3RyaXAgd2hpdGUgc3BhY2Ugb24gYWxsIGxpbmVzLCBpbmNs
dWRpbmcgdHJhaWxpbmcgXHIgZnJvbSBhYm92ZSBzcGxpdC4KLSAgICAgICAgLy8gSWYgdGhpcyBs
ZWF2ZXMgYSBsaW5lIGVtcHR5LCByZW1vdmUgaXQgY29tcGxldGVseS4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gQWxzbywgY29weSB0aGUgZmlyc3QgdmFsaWQgVVJMIGludG8gdGhlICd1cmwnIG1l
bWJlciBhcyB3ZWxsLgotICAgICAgICAvLyBJbiBjYXNlIG5vIGVudHJ5IGlzIGEgdmFsaWQgVVJM
IChpLmUuLCByZW1hcmtzIG9ubHkpLCB0aGVuIHdlIGxlYXZlICd1cmwnIGVtcHR5LgotICAgICAg
ICAvLyBJLmUuLCBpbiB0aGF0IGNhc2Ugc3Vic2VxdWVudCBjYWxscyB0byBnZXREYXRhKCJVUkwi
KSB3aWxsIGdldCBhbiBlbXB0eSBzdHJpbmcuCi0gICAgICAgIC8vIFRoaXMgaXMgaW4gbGluZSB3
aXRoIHRoZSBIVE1MNSBzcGVjIChzZWUgIlRoZSBEcmFnRXZlbnQgYW5kIERhdGFUcmFuc2ZlciBp
bnRlcmZhY2VzIikuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9kYXRhT2JqZWN0
LT51cmlMaXN0LnNpemUoKTsgLyoqLykgewotICAgICAgICAgICAgU3RyaW5nJiBsaW5lID0gbV9k
YXRhT2JqZWN0LT51cmlMaXN0W2ldOwotICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXBXaGl0
ZVNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICBtX2RhdGFPYmplY3QtPnVyaUxpc3QucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgLy8g
T25seSBjb3B5IHRoZSBmaXJzdCB2YWxpZCBVUkwuCi0gICAgICAgICAgICBpZiAobV9kYXRhT2Jq
ZWN0LT51cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgLy8gU2tpcCByZW1hcmtzLgotICAgICAgICAgICAgaWYgKGxpbmVbMF0gPT0gJyMnKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgbGluZSk7Ci0gICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICBtX2RhdGFPYmplY3QtPnVybCA9IHVybDsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobV9kYXRhT2JqZWN0LT51cmlMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJU
KG1fZGF0YU9iamVjdC0+dXJsLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YS5p
c0VtcHR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENs
aXBib2FyZERhdGFUeXBlRG93bmxvYWRVUkw6Ci0gICAgICAgIG1fZGF0YU9iamVjdC0+ZG93bmxv
YWRNZXRhZGF0YSA9IGRhdGE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSBDbGlw
Ym9hcmREYXRhVHlwZVBsYWluVGV4dDoKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQg
PSBkYXRhOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgQ2xpcGJvYXJkRGF0YVR5
cGVIVE1MOgotICAgICAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gZGF0YTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBjYXNlIENsaXBib2FyZERhdGFUeXBlT3RoZXI6Ci0gICAgICAg
IC8vIE5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ0MTAKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1f
ZGF0YU9iamVjdC0+c2V0RGF0YShub3JtYWxpemVUeXBlKHR5cGUpLCBkYXRhKTsKIH0KIAogLy8g
ZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKIEhhc2hTZXQ8U3RyaW5nPiBDbGlwYm9hcmRDaHJv
bWl1bTo6dHlwZXMoKSBjb25zdAogewotICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOwogICAg
IGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFkYWJsZSAmJiBwb2xpY3koKSAhPSBDbGlwYm9h
cmRUeXBlc1JlYWRhYmxlKQotICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAgICAgcmV0dXJu
IEhhc2hTZXQ8U3RyaW5nPigpOwogCiAgICAgaWYgKCFtX2RhdGFPYmplY3QpCi0gICAgICAgIHJl
dHVybiByZXN1bHRzOwotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdHMuYWRkKCJGaWxlcyIpOwotCi0gICAgLy8gSGFjayBmb3IgVVJM
cy4gZmlsZSBVUkxzIGFyZSB1c2VkIGludGVybmFsbHkgZm9yIGRyb3AncyBkZWZhdWx0IGFjdGlv
biwgYnV0IHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBleHBvc2UgdGhlbSB0byB0aGUgcGFnZSwg
c28gd2UgZmlsdGVyIHRoZW0gb3V0IGhlcmUuCi0gICAgaWYgKG1fZGF0YU9iamVjdC0+dXJsLmlz
VmFsaWQoKSAmJiAhbV9kYXRhT2JqZWN0LT51cmwuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICBB
U1NFUlQoIW1fZGF0YU9iamVjdC0+dXJpTGlzdC5pc0VtcHR5KCkpOwotICAgICAgICByZXN1bHRz
LmFkZCgiVVJMIik7Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QtPnVyaUxpc3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBVUkkgbGlzdCBjb250YWlucyBh
dCBsZWFzdCBvbmUgbm9uLWZpbGUgVVJMLgotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5iZWdpbigpOwotICAgICAg
ICAgICAgIGl0ICE9IG1fZGF0YU9iamVjdC0+dXJpTGlzdC5lbmQoKTsgKytpdCkgewotICAgICAg
ICAgICAgaWYgKCFwcm90b2NvbElzKCppdCwgImZpbGUiKSkgewotICAgICAgICAgICAgICAgIC8v
IE5vdGUgdGhhdCBldmVuIGlmIHRoZSBVUkkgbGlzdCBpcyBub3QgZW1wdHksIGl0IG1heSBub3Qg
YWN0dWFsbHkKLSAgICAgICAgICAgICAgICAvLyBjb250YWluIGEgdmFsaWQgVVJMLCBzbyB3ZSBj
YW4ndCByZXR1cm4gIlVSTCIgaGVyZS4KLSAgICAgICAgICAgICAgICByZXN1bHRzLmFkZCgidGV4
dC91cmktbGlzdCIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX2RhdGFPYmplY3QtPnBsYWluVGV4dC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgcmVzdWx0cy5hZGQoIlRleHQiKTsKLSAgICAgICAgcmVzdWx0cy5hZGQo
InRleHQvcGxhaW4iKTsKLSAgICB9CisgICAgICAgIHJldHVybiBIYXNoU2V0PFN0cmluZz4oKTsK
IAotICAgIHJldHVybiByZXN1bHRzOworICAgIHJldHVybiBtX2RhdGFPYmplY3QtPnR5cGVzKCk7
CiB9CiAKIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2FyZENocm9taXVtOjpmaWxlcygpIGNv
bnN0CkBAIC0zNjEsMTMgKzE1NCwxNCBAQCBQYXNzUmVmUHRyPEZpbGVMaXN0PiBDbGlwYm9hcmRD
aHJvbWl1bTo6ZmlsZXMoKSBjb25zdAogICAgIGlmIChwb2xpY3koKSAhPSBDbGlwYm9hcmRSZWFk
YWJsZSkKICAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKIAotICAgIGlmICghbV9k
YXRhT2JqZWN0IHx8IG1fZGF0YU9iamVjdC0+ZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICBpZiAo
IW1fZGF0YU9iamVjdCB8fCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcygpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKIAogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlzdCA9IEZp
bGVMaXN0OjpjcmVhdGUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YU9iamVj
dC0+ZmlsZW5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6
OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBtX2RhdGFPYmplY3QtPmZpbGVuYW1lcy5h
dChpKSkpOworICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMgPSBtX2RhdGFPYmpl
Y3QtPmZpbGVuYW1lcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLnNp
emUoKTsgKytpKQorICAgICAgICBmaWxlTGlzdC0+YXBwZW5kKEZpbGU6OmNyZWF0ZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBmaWxlbmFtZXMuYXQoaSkpKTsKIAogICAgIHJldHVybiBmaWxlTGlz
dC5yZWxlYXNlKCk7CiB9CkBAIC00NjYsNyArMjYwLDcgQEAgc3RhdGljIHZvaWQgd3JpdGVJbWFn
ZVRvRGF0YU9iamVjdChDaHJvbWl1bURhdGFPYmplY3QqIGRhdGFPYmplY3QsIEVsZW1lbnQqIGVs
ZW0KICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlci0+c2l6ZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBkYXRhT2JqZWN0LT5maWxlQ29udGVudCA9IGltYWdlQnVmZmVyOwor
ICAgIGRhdGFPYmplY3QtPnNldEZpbGVDb250ZW50KGltYWdlQnVmZmVyKTsKIAogICAgIC8vIERl
dGVybWluZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBmaWxlIGNvbnRlbnRzIG9mIHRoZSBpbWFnZS4g
IFdlIHRyeSB0bwogICAgIC8vIHVzZSB0aGUgYWx0IHRhZyBpZiBvbmUgZXhpc3RzLCBvdGhlcndp
c2Ugd2UgZmFsbCBiYWNrIG9uIHRoZSBzdWdnZXN0ZWQKQEAgLTQ3NCwxMyArMjY4LDEzIEBAIHN0
YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1EYXRhT2JqZWN0KiBkYXRh
T2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgLy8gaW4gdGhlIFVSTC4KICAgICBTdHJpbmcgZXh0
ZW5zaW9uID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5
cGUoCiAgICAgICAgIGNhY2hlZEltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwotICAgIGRh
dGFPYmplY3QtPmZpbGVFeHRlbnNpb24gPSBleHRlbnNpb24uaXNFbXB0eSgpID8gIiIgOiAiLiIg
KyBleHRlbnNpb247CisgICAgU3RyaW5nIGZpbGVFeHRlbnNpb24gPSBleHRlbnNpb24uaXNFbXB0
eSgpID8gIiIgOiAiLiIgKyBleHRlbnNpb247CiAgICAgU3RyaW5nIHRpdGxlID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAg
IHRpdGxlID0gY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkuc3VnZ2VzdGVkRmlsZW5hbWUoKTsKIAog
ICAgIHRpdGxlID0gQ2xpcGJvYXJkQ2hyb21pdW06OnZhbGlkYXRlRmlsZU5hbWUodGl0bGUsIGRh
dGFPYmplY3QpOwotICAgIGRhdGFPYmplY3QtPmZpbGVDb250ZW50RmlsZW5hbWUgPSB0aXRsZSAr
IGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb247CisgICAgZGF0YU9iamVjdC0+c2V0RmlsZUNvbnRl
bnRGaWxlbmFtZSh0aXRsZSArIGZpbGVFeHRlbnNpb24pOwogfQogCiB2b2lkIENsaXBib2FyZENo
cm9taXVtOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCkBAIC00ODgsOCAr
MjgyLDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdl
KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHUKICAgICBpZiAoIW1fZGF0YU9iamVjdCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9k
YXRhT2JqZWN0LT51cmxUaXRsZSA9IHRpdGxlOworICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVy
bCwgdGl0bGUpOwogCiAgICAgLy8gV3JpdGUgdGhlIGJ5dGVzIGluIHRoZSBpbWFnZSB0byB0aGUg
ZmlsZSBmb3JtYXQuCiAgICAgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChtX2RhdGFPYmplY3QuZ2V0
KCksIGVsZW1lbnQsIHVybCk7CkBAIC01MDMsNyArMjk2LDcgQEAgdm9pZCBDbGlwYm9hcmRDaHJv
bWl1bTo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtV
UkwmIHUKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUHV0IGltZyB0YWcgb24gdGhlIGNsaXBi
b2FyZCByZWZlcmVuY2luZyB0aGUgaW1hZ2UKLSAgICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0g
aW1hZ2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhU
TUwoaW1hZ2VUb01hcmt1cChmdWxsVVJMLCBlbGVtZW50KSwgS1VSTCgpKTsKIH0KIAogdm9pZCBD
bGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHRpdGxlLCBGcmFtZSopCkBAIC01MTEsMTcgKzMwNCwxMyBAQCB2b2lkIENsaXBib2FyZENocm9t
aXVtOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1l
KikKICAgICBpZiAoIW1fZGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCgh
dXJsLmlzRW1wdHkoKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT51cmwgPSB1cmw7Ci0gICAgbV9kYXRh
T2JqZWN0LT51cmxUaXRsZSA9IHRpdGxlOwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5jbGVh
cigpOwotICAgIG1fZGF0YU9iamVjdC0+dXJpTGlzdC5hcHBlbmQodXJsKTsKKyAgICBtX2RhdGFP
YmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKIAogICAgIC8vIFRoZSBVUkwgY2FuIGFsc28gYmUg
dXNlZCBhcyBwbGFpbiB0ZXh0LgotICAgIG1fZGF0YU9iamVjdC0+cGxhaW5UZXh0ID0gdXJsLnN0
cmluZygpOworICAgIG1fZGF0YU9iamVjdC0+c2V0RGF0YSgidGV4dC9wbGFpbiIsIHVybCk7CiAK
ICAgICAvLyBUaGUgVVJMIGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gSFRNTCBmcmFnbWVudC4KLSAg
ICBtX2RhdGFPYmplY3QtPnRleHRIdG1sID0gdXJsVG9NYXJrdXAodXJsLCB0aXRsZSk7Ci0gICAg
bV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9IHVybDsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhU
TUwodXJsVG9NYXJrdXAodXJsLCB0aXRsZSksIHVybCk7CiB9CiAKIHZvaWQgQ2xpcGJvYXJkQ2hy
b21pdW06OndyaXRlUmFuZ2UoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKQEAg
LTUzMCwxNSArMzE5LDE2IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRlUmFuZ2UoUmFu
Z2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKICAgICBpZiAoIW1fZGF0YU9iamVjdCkK
ICAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YU9iamVjdC0+dGV4dEh0bWwgPSBjcmVhdGVN
YXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIEFi
c29sdXRlVVJMcyk7Ci0gICAgbV9kYXRhT2JqZWN0LT5odG1sQmFzZVVybCA9IGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldEhUTUwoCisgICAgICAgIGNyZWF0
ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwg
QWJzb2x1dGVVUkxzKSwKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKIAogICAg
IFN0cmluZyBzdHIgPSBmcmFtZS0+c2VsZWN0ZWRUZXh0KCk7CiAjaWYgT1MoV0lORE9XUykKICAg
ICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKICNlbmRpZgog
ICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNlKHN0cik7Ci0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRl
eHQgPSBzdHI7CisgICAgbV9kYXRhT2JqZWN0LT5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgc3RyKTsK
IH0KIAogdm9pZCBDbGlwYm9hcmRDaHJvbWl1bTo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0KQpAQCAtNTUxLDcgKzM0MSw3IEBAIHZvaWQgQ2xpcGJvYXJkQ2hyb21pdW06OndyaXRl
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2lu
ZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNl
KHN0cik7Ci0gICAgbV9kYXRhT2JqZWN0LT5wbGFpblRleHQgPSBzdHI7CisgICAgbV9kYXRhT2Jq
ZWN0LT5zZXREYXRhKCJ0ZXh0L3BsYWluIiwgc3RyKTsKIH0KIAogYm9vbCBDbGlwYm9hcmRDaHJv
bWl1bTo6aGFzRGF0YSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtLmggYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmgKaW5kZXggYTQxNTBkMGYzMTUzYTE0MDU5NTE3MTM0ZmQ4OGZlYTg4MGVlY2QxOS4u
NDk0NjBkYmY0NDM4ZmM0NTdmZmYyODg1MGUyODYxYzJkNTA3MWIyZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRDaHJvbWl1bS5oCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uaApAQCAtNDUsOCArNDUsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgfkNsaXBib2FyZENocm9t
aXVtKCkge30KIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRDaHJvbWl1bT4g
Y3JlYXRlKAotICAgICAgICAgICAgYm9vbCBpc0ZvckRyYWdnaW5nLCBQYXNzUmVmUHRyPENocm9t
aXVtRGF0YU9iamVjdD4sIENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGUoCisgICAgICAgICAgICBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3ksIERyYWdEYXRhKiwgRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2xpcGJvYXJkPiBjcmVhdGUoCisgICAgICAgICAgICBib29sIGlzRm9yRHJhZ2dpbmcs
IENsaXBib2FyZEFjY2Vzc1BvbGljeSwgRnJhbWUqKTsKIAogICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBmaWxlIG5hbWUgKG5vdCBpbmNsdWRpbmcgdGhlIGV4dGVuc2lvbikuIFRoaXMgcmVtb3ZlcyBh
bnkKICAgICAgICAgLy8gaW52YWxpZCBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJzIGFzIHdlbGwgYXMg
bWFraW5nIHN1cmUgdGhlCkBAIC04MCw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdmlydHVhbCBib29sIGhhc0RhdGEoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENs
aXBib2FyZENocm9taXVtKGJvb2wsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiwgQ2xp
cGJvYXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOworICAgICAgICBDbGlwYm9hcmRDaHJvbWl1bShi
b29sIGlzRm9yRHJhZ2dpbmcsIFBhc3NSZWZQdHI8Q2hyb21pdW1EYXRhT2JqZWN0PiwgQ2xpcGJv
YXJkQWNjZXNzUG9saWN5LCBGcmFtZSopOwogCiAgICAgICAgIHZvaWQgcmVzZXRGcm9tQ2xpcGJv
YXJkKCk7CiAgICAgICAgIHZvaWQgc2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiwgTm9kZSosIGNv
bnN0IEludFBvaW50Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtV2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJv
YXJkQ2hyb21pdW1XaW4uY3BwCmluZGV4IGI0YTJjMjExMzZjN2Y1YjJhMzI3MDBhYjcwZTdmMzY5
NDkzNTc2YzEuLmQ5YmJlYjVkZDNkMzdhMjU0ODkxNGFhYmNlZjAzZWQ5YWZjMGJjZDcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1XaW4uY3Bw
CkBAIC00NCwxMSArNDQsMTEgQEAgU3RyaW5nIENsaXBib2FyZENocm9taXVtOjp2YWxpZGF0ZUZp
bGVOYW1lKGNvbnN0IFN0cmluZyYgdGl0bGUsIENocm9taXVtRGF0YU9iamUKIHsKICAgICAvLyBS
ZW1vdmUgYW55IGludmFsaWQgZmlsZSBzeXN0ZW0gY2hhcmFjdGVycy4KICAgICBTdHJpbmcgcmVz
dWx0ID0gdGl0bGUucmVtb3ZlQ2hhcmFjdGVycygmaXNJbnZhbGlkRmlsZUNoYXJhY3Rlcik7Ci0g
ICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmplY3QtPmZpbGVFeHRlbnNpb24ubGVuZ3Ro
KCkgKyAxID49IE1BWF9QQVRIKSB7Ci0gICAgICAgIGlmIChkYXRhT2JqZWN0LT5maWxlRXh0ZW5z
aW9uLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkKLSAgICAgICAgICAgIGRhdGFPYmplY3QtPmZp
bGVFeHRlbnNpb24gPSAiIjsKLSAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSArIGRhdGFPYmpl
Y3QtPmZpbGVFeHRlbnNpb24ubGVuZ3RoKCkgKyAxID49IE1BWF9QQVRIKQotICAgICAgICAgICAg
cmVzdWx0ID0gcmVzdWx0LnN1YnN0cmluZygwLCBNQVhfUEFUSCAtIGRhdGFPYmplY3QtPmZpbGVF
eHRlbnNpb24ubGVuZ3RoKCkgLSAxKTsKKyAgICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9i
amVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFUSCkgeworICAgICAg
ICBpZiAoZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0aCgpICsgMSA+PSBNQVhfUEFU
SCkKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNldEZpbGVFeHRlbnNpb24oIiIpOworICAgICAg
ICBpZiAocmVzdWx0Lmxlbmd0aCgpICsgZGF0YU9iamVjdC0+ZmlsZUV4dGVuc2lvbigpLmxlbmd0
aCgpICsgMSA+PSBNQVhfUEFUSCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJzdHJp
bmcoMCwgTUFYX1BBVEggLSBkYXRhT2JqZWN0LT5maWxlRXh0ZW5zaW9uKCkubGVuZ3RoKCkgLSAx
KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCmluZGV4IDY3NGQzNGQyOTYwOWQxYWE1ZTQ2NjE5
NGNlYTFhNzI5NWU3NDlkMjcuLmYyYzQxNTA1YzZlZDlmNTYzOTNkMDA3ZDRhZGVjNWMxNzQwYzg3
ZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1
bS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNw
cApAQCAtNDMsNTAgKzQzLDUyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wg
Y29udGFpbnNIVE1MKGNvbnN0IENocm9taXVtRGF0YU9iamVjdCogZHJvcERhdGEpCiB7Ci0gICAg
cmV0dXJuIGRyb3BEYXRhLT50ZXh0SHRtbC5sZW5ndGgoKSA+IDA7CisgICAgcmV0dXJuIGRyb3BE
YXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L2h0bWwiKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6
Y29udGFpbnNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5KSBjb25z
dAogewotICAgIHJldHVybiAhYXNVUkwoZmlsZW5hbWVQb2xpY3kpLmlzRW1wdHkoKTsKKyAgICBy
ZXR1cm4gbV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0L3VyaS1saXN0
IikKKyAgICAgICAgfHwgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYgbV9w
bGF0Zm9ybURyYWdEYXRhLT5oYXNGaWxlbmFtZXMoKSk7CiB9CiAKIFN0cmluZyBEcmFnRGF0YTo6
YXNVUkwoRmlsZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqIHRp
dGxlKSBjb25zdAogewotICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0
YS0+aGFzVmFsaWRVUkwoKSkKLSAgICAgICAgdXJsID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5nZXRV
UkwoKS5zdHJpbmcoKTsKLSAgICBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0Rmls
ZW5hbWVzICYmICFtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXNbMF07
CisgICAgU3RyaW5nIHVybCA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0VVJMKHRpdGxlKTsKKyAg
ICBpZiAoIUtVUkwoS1VSTCgpLCB1cmwpLmlzVmFsaWQoKQorICAgICAgICAmJiBmaWxlbmFtZVBv
bGljeSA9PSBDb252ZXJ0RmlsZW5hbWVzCisgICAgICAgICYmIG1fcGxhdGZvcm1EcmFnRGF0YS0+
aGFzRmlsZW5hbWVzKCkpIHsKKyAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gbV9wbGF0Zm9ybURy
YWdEYXRhLT5maWxlbmFtZXMoKVswXTsKICAgICAgICAgZmlsZU5hbWUgPSBDaHJvbWl1bUJyaWRn
ZTo6Z2V0QWJzb2x1dGVQYXRoKGZpbGVOYW1lKTsKICAgICAgICAgdXJsID0gQ2hyb21pdW1Ccmlk
Z2U6OmZpbGVQYXRoVG9VUkwoZmlsZU5hbWUpLnN0cmluZygpOworICAgICAgICBpZiAodGl0bGUp
CisgICAgICAgICAgKnRpdGxlID0gIiI7CiAgICAgfQogIAotICAgIC8vIHx0aXRsZXwgY2FuIGJl
IE5VTEwKLSAgICBpZiAodGl0bGUpCi0gICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0
YS0+dXJsVGl0bGU7CiAgICAgcmV0dXJuIHVybDsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFp
bnNGaWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVu
YW1lcy5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+aGFzRmlsZW5h
bWVzKCk7CiB9CiAKIHZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJpbmc+JiBy
ZXN1bHQpIGNvbnN0CiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsYXRmb3JtRHJh
Z0RhdGEtPmZpbGVuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lc1tpXSk7CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGZpbGVuYW1lcyA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoZmlsZW5hbWVzW2ldKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRl
eHQoKSBjb25zdAogewotICAgIHJldHVybiAhbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQu
aXNFbXB0eSgpOworICAgIHJldHVybiBtX3BsYXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFp
bnMoInRleHQvcGxhaW4iKTsKIH0KIAogU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+cGxhaW5UZXh0OworICAgIGJv
b2wgaWdub3JlZFN1Y2Nlc3M7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EcmFnRGF0YS0+Z2V0RGF0
YSgidGV4dC9wbGFpbiIsIGlnbm9yZWRTdWNjZXNzKTsKIH0KIAogYm9vbCBEcmFnRGF0YTo6Y29u
dGFpbnNDb2xvcigpIGNvbnN0CkBAIC0xMDEsOCArMTAzLDggQEAgYm9vbCBEcmFnRGF0YTo6Y2Fu
U21hcnRSZXBsYWNlKCkgY29uc3QKICAgICAvLyBUaGlzIGlzIGFsbG93ZWQgd2hlbmV2ZXIgdGhl
IGRyYWcgZGF0YSBjb250YWlucyBhICdyYW5nZScgKGllLiwKICAgICAvLyBDbGlwYm9hcmRXaW46
OndyaXRlUmFuZ2UgaXMgY2FsbGVkKS4gIEZvciBleGFtcGxlLCBkcmFnZ2luZyBhIGxpbmsKICAg
ICAvLyBzaG91bGQgbm90IHJlc3VsdCBpbiBhIHNwYWNlIGJlaW5nIGFkZGVkLgotICAgIHJldHVy
biAhbV9wbGF0Zm9ybURyYWdEYXRhLT5wbGFpblRleHQuaXNFbXB0eSgpCi0gICAgICAgICYmICFt
X3BsYXRmb3JtRHJhZ0RhdGEtPmhhc1ZhbGlkVVJMKCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1E
cmFnRGF0YS0+dHlwZXMoKS5jb250YWlucygidGV4dC9wbGFpbiIpCisgICAgICAgICYmICFtX3Bs
YXRmb3JtRHJhZ0RhdGEtPnR5cGVzKCkuY29udGFpbnMoInRleHQvdXJpLWxpc3QiKTsKIH0KIAog
Ym9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpIGNvbnN0CkBAIC0xMzQs
OSArMTM2LDExIEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJh
Z21lbnQoRG9jdW1lbnQqIGRvYykgY29uc3QKICAgICAgICAgLy8gICAgcmV0dXJuIGZyYWdtZW50
OwogICAgIH0KIAotICAgIGlmICghbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbC5pc0VtcHR5
KCkpIHsKKyAgICBpZiAobV9wbGF0Zm9ybURyYWdEYXRhLT50eXBlcygpLmNvbnRhaW5zKCJ0ZXh0
L2h0bWwiKSkgeworICAgICAgICBTdHJpbmcgYmFzZVVSTDsKKyAgICAgICAgU3RyaW5nIGh0bWwg
PSBtX3BsYXRmb3JtRHJhZ0RhdGEtPmdldEhUTUwoJmJhc2VVUkwpOwogICAgICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9j
LAotICAgICAgICAgICAgbV9wbGF0Zm9ybURyYWdEYXRhLT50ZXh0SHRtbCwgbV9wbGF0Zm9ybURy
YWdEYXRhLT5odG1sQmFzZVVybCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKKyAgICAg
ICAgICAgIGh0bWwsIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCk7CiAgICAg
ICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTM3ODE4
N2UzMWMwMzIzYWQ4MTA4OGM0MzIzOTMxMmMxOWEzNjQ5NAotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcApAQCAtMCwwICsx
LDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhZGFibGVEYXRh
T2JqZWN0LmgiCisKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGNsaXBi
b2FyZEJ1ZmZlcihib29sIGlzRm9yRHJhZ2dpbmcpCit7CisgICAgcmV0dXJuIGlzRm9yRHJhZ2dp
bmcgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6RHJhZ0J1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpT
dGFuZGFyZEJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6
ZWQoYm9vbCBpc0ZvckRyYWdnaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCYgaXNUeXBlQ2FjaGVJbml0aWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiYgdHlwZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBjb250YWluc0ZpbGVuYW1lcykKK3sKKyAg
ICBpZiAoaXNUeXBlQ2FjaGVJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHlw
ZXMgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKAorICAgICAg
ICBjbGlwYm9hcmRCdWZmZXIoaXNGb3JEcmFnZ2luZyksICZjb250YWluc0ZpbGVuYW1lcyk7Cisg
ICAgaXNUeXBlQ2FjaGVJbml0aWFsaXplZCA9IHRydWU7Cit9CisKK1Bhc3NSZWZQdHI8UmVhZGFi
bGVEYXRhT2JqZWN0PiBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZShib29sIGlzRm9yRHJhZ2dp
bmcpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZWFkYWJsZURhdGFPYmplY3QoaXNGb3JE
cmFnZ2luZykpOworfQorCitSZWFkYWJsZURhdGFPYmplY3Q6OlJlYWRhYmxlRGF0YU9iamVjdChi
b29sIGlzRm9yRHJhZ2dpbmcpCisgICAgOiBtX2lzRm9yRHJhZ2dpbmcoaXNGb3JEcmFnZ2luZyks
IG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZChmYWxzZSkKK3sKK30KKworLy8gTm9uZSBvZiB0aGUg
bm9uLWNvbnN0IG1ldGhvZHMgc2hvdWxkIGV2ZXIgYmUgY2FsbGVkLgordm9pZCBSZWFkYWJsZURh
dGFPYmplY3Q6OmNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpjbGVhckFsbEV4Y2Vw
dEZpbGVzKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBSZWFkYWJs
ZURhdGFPYmplY3Q6OmNsZWFyKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
Ym9vbCBSZWFkYWJsZURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAoreworICAgIGVuc3VyZVR5
cGVDYWNoZUluaXRpYWxpemVkKG1faXNGb3JEcmFnZ2luZywgbV9pc1R5cGVDYWNoZUluaXRpYWxp
emVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdHlwZXMsIG1fY29udGFpbnNG
aWxlbmFtZXMpOworICAgIHJldHVybiAhbV90eXBlcy5pc0VtcHR5KCkgfHwgbV9jb250YWluc0Zp
bGVuYW1lczsKK30KKworSGFzaFNldDxTdHJpbmc+IFJlYWRhYmxlRGF0YU9iamVjdDo6dHlwZXMo
KSBjb25zdAoreworICAgIGVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKG1faXNGb3JEcmFnZ2lu
ZywgbV9pc1R5cGVDYWNoZUluaXRpYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdHlwZXMsIG1fY29udGFpbnNGaWxlbmFtZXMpOworICAgIHJldHVybiBtX3R5cGVzOwor
fQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlw
ZSwgYm9vbCYgc3VjY2VlZGVkKSBjb25zdAoreworICAgIFN0cmluZyBkYXRhOworICAgIFN0cmlu
ZyBpZ25vcmVkTWV0YWRhdGE7CisgICAgc3VjY2VlZGVkID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSwg
dHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworYm9v
bCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRs
ZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgdXJsOworICAgIFN0cmluZyBpZ25vcmVkVGl0bGU7Cisg
ICAgaWYgKCF0aXRsZSkKKyAgICAgICAgdGl0bGUgPSAmaWdub3JlZFRpdGxlOworICAgIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKKyAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1f
aXNGb3JEcmFnZ2luZyksICJ0ZXh0L3VyaS1saXN0IiwgdXJsLCAqdGl0bGUpOworICAgIHJldHVy
biB1cmw7Cit9CisKK3ZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjpzZXRVUkwoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK1N0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nKiBiYXNlVVJM
KSBjb25zdAoreworICAgIFN0cmluZyBodG1sOworICAgIFN0cmluZyBpZ25vcmVkQmFzZVVSTDsK
KyAgICBpZiAoIWJhc2VVUkwpCisgICAgICAgIGJhc2VVUkwgPSAmaWdub3JlZEJhc2VVUkw7Cisg
ICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAorICAgICAgICBjbGlwYm9hcmRC
dWZmZXIobV9pc0ZvckRyYWdnaW5nKSwgInRleHQvaHRtbCIsIGh0bWwsICpiYXNlVVJMKTsKKyAg
ICByZXR1cm4gaHRtbDsKK30KKwordm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OnNldEhUTUwoY29u
c3QgU3RyaW5nJiBodG1sLCBjb25zdCBLVVJMJiBiYXNlVVJMKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitib29sIFJlYWRhYmxlRGF0YU9iamVjdDo6aGFzRmlsZW5hbWVzKCkg
Y29uc3QKK3sKKyAgICBlbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZChtX2lzRm9yRHJhZ2dpbmcs
IG1faXNUeXBlQ2FjaGVJbml0aWFsaXplZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3R5cGVzLCBtX2NvbnRhaW5zRmlsZW5hbWVzKTsKKyAgICByZXR1cm4gbV9jb250YWluc0Zp
bGVuYW1lczsKK30KKworVmVjdG9yPFN0cmluZz4gUmVhZGFibGVEYXRhT2JqZWN0OjpmaWxlbmFt
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZp
bGVuYW1lcyhjbGlwYm9hcmRCdWZmZXIobV9pc0ZvckRyYWdnaW5nKSk7Cit9CisKKy8vIFRoZXNl
IGZ1bmN0aW9ucyBzaG91bGQgb25seSBiZSB1c2VkIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgZnJv
bSB0aGUgcmVuZGVyZXIKKy8vIHRvIHRoZSBicm93c2VyLgorSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4gUmVhZGFibGVEYXRhT2JqZWN0OjpkYXRhTWFwKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKK30KKwor
U3RyaW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUoKSBjb25zdAoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworS1VSTCBSZWFkYWJs
ZURhdGFPYmplY3Q6Omh0bWxCYXNlVVJMKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gS1VSTCgpOworfQorCitTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0
OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK1N0cmluZyBSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVD
b250ZW50RmlsZW5hbWUoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlYWRhYmxl
RGF0YU9iamVjdDo6ZmlsZUNvbnRlbnQoKSBjb25zdAoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6c2V0Rmls
ZUV4dGVuc2lvbihjb25zdCBTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25z
dCBTdHJpbmcmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFJlYWRh
YmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+KQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVj
dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YmQ3MjE3OThhNTAyMTAwNWZiZGRhNzg4MWZkZjU5ZjVmNDhkODkwCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3Qu
aApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVhZGFibGVEYXRhT2JqZWN0X2gKKyNk
ZWZpbmUgUmVhZGFibGVEYXRhT2JqZWN0X2gKKworI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVj
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZWQgZm9yIG9uZSB3YXkgY29tbXVu
aWNhdGlvbiBvZiBkcmFnL2Ryb3AgYW5kIGNvcHkvcGFzdGUgZGF0YSBmcm9tIHRoZQorLy8gYnJv
d3NlciB0byB0aGUgcmVuZGVyZXIuCitjbGFzcyBSZWFkYWJsZURhdGFPYmplY3QgOiBwdWJsaWMg
Q2hyb21pdW1EYXRhT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZWFk
YWJsZURhdGFPYmplY3Q+IGNyZWF0ZShib29sIGlzRm9yRHJhZ2dpbmcpOworCisgICAgdmlydHVh
bCB2b2lkIGNsZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBj
bGVhckFsbEV4Y2VwdEZpbGVzKCk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmly
dHVhbCBib29sIGhhc0RhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhhc2hTZXQ8U3RyaW5nPiB0
eXBlcygpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0
eXBlLCBib29sJiBzdWNjZWVkZWQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXREYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKKworICAgIC8vIFNwZWNpYWwg
YWNjZXNzb3JzIGZvciBVUkwgYW5kIEhUTUwgc2luY2UgdGhleSBjYXJyeSBhZGRpdGlvbmFsCisg
ICAgLy8gbWV0YWRhdGEuCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0VVJMKFN0cmluZyogdGl0bGUp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgdGl0bGUpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEhUTUwoU3RyaW5nKiBiYXNl
VVJMKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SFRNTChjb25zdCBTdHJpbmcmIGh0bWws
IGNvbnN0IEtVUkwmIGJhc2VVUkwpOworCisgICAgdmlydHVhbCBib29sIGhhc0ZpbGVuYW1lcygp
IGNvbnN0OworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7CisK
KyAgICAvLyBBY2Nlc3NvcnMgdXNlZCB3aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0
aGUgcmVuZGVyZXIgdG8gdGhlCisgICAgLy8gYnJvd3Nlci4KKyAgICB2aXJ0dWFsIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGRhdGFNYXAoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB1cmxU
aXRsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgS1VSTCBodG1sQmFzZVVSTCgpIGNvbnN0OworCisg
ICAgLy8gVXNlZCBmb3IgdHJhbnNmZXJyaW5nIGZpbGUgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0
byB0aGUgYnJvd3Nlci4KKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlRXh0ZW5zaW9uKCkgY29uc3Q7
CisgICAgdmlydHVhbCBTdHJpbmcgZmlsZUNvbnRlbnRGaWxlbmFtZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGZpbGVDb250ZW50KCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHNldEZpbGVFeHRlbnNpb24oY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVh
bCB2b2lkIHNldEZpbGVDb250ZW50RmlsZW5hbWUoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVh
bCB2b2lkIHNldEZpbGVDb250ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPik7CisKK3ByaXZh
dGU6CisgICAgUmVhZGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZyk7CisKKyAgICBi
b29sIG1faXNGb3JEcmFnZ2luZzsKKworICAgIC8vIFRvIGF2b2lkIG1ha2luZyBhIGxvdCBvZiBJ
UEMgY2FsbHMgZm9yIGVhY2ggZHJhZyBldmVudCwgd2UgY2FjaGUgc29tZQorICAgIC8vIHZhbHVl
cyBpbiB0aGUgcmVuZGVyZXIuCisgICAgLy8gVE9ETzogSXMgdGhpcyBhY3R1YWxseSB0aGUgcmln
aHQgcGxhY2UgdG8gZG8gdGhlIGNhY2hpbmc/IElzbid0IHRoZSBkYXRhCisgICAgLy8gb2JqZWN0
IGdldHRpbmcgY3JlYXRlZC9kZXN0cm95ZWQgd2l0aCBlYWNoIGRyYWcgZXZlbnQ/CisgICAgbXV0
YWJsZSBIYXNoU2V0PFN0cmluZz4gbV90eXBlczsKKyAgICBtdXRhYmxlIGJvb2wgbV9jb250YWlu
c0ZpbGVuYW1lczsKKyAgICBtdXRhYmxlIGJvb2wgbV9pc1R5cGVDYWNoZUluaXRpYWxpemVkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODUwNzhm
NTg3NjQ0NjFmNGExZDI4YmQ2OWI3YzZkMDcwODczZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCkBAIC0wLDAgKzEs
MjEyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXcml0YWJsZURhdGFP
YmplY3QuaCIKKworI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gVE9ETzogVmVyaWZ5IGl0IHRoZSBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlYWQt
b25seSBtZXRob2RzIGFyZSBuZWVkZWQuIFBlciB0aGUKKy8vIGNvZGUgY3VycmVudGx5IGluIENs
aXBib2FyZENocm9taXVtLCBpdCdzIGFjdHVhbGx5IHVubmVjZXNzYXJ5LCBidXQgd2Ugc2hvdWxk
CisvLyBkb3VibGUgY2hlY2sgaWYgdGhpcyBpcyBpbnRlbmRlZCBieSB0aGUgc3BlYywgZXNwZWNp
YWxseSBzaW5jZSBpdCBkb2Vzbid0CisvLyByZWFsbHkgYWRkcmVzcyB3aGVuIHRoZSBjbGlwYm9h
cmQgb2JqZWN0IHNob3VsZCBiZSByZWFkYWJsZSBhbmQgd2hlbiBpdAorLy8gc2hvdWxkIGJlIHdy
aXRhYmxlLgorUGFzc1JlZlB0cjxXcml0YWJsZURhdGFPYmplY3Q+IFdyaXRhYmxlRGF0YU9iamVj
dDo6Y3JlYXRlKGJvb2wgaXNGb3JEcmFnZ2luZykKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFdyaXRhYmxlRGF0YU9iamVjdChpc0ZvckRyYWdnaW5nKSk7Cit9CisKK1dyaXRhYmxlRGF0YU9i
amVjdDo6V3JpdGFibGVEYXRhT2JqZWN0KGJvb2wgaXNGb3JEcmFnZ2luZykKKyAgICA6IG1faXNG
b3JEcmFnZ2luZyhpc0ZvckRyYWdnaW5nKQoreworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVj
dDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBtX2RhdGFNYXAucmVtb3Zl
KHR5cGUpOworICAgIGlmICh0eXBlID09ICJ0ZXh0L3VyaS1saXN0IikKKyAgICAgICAgbV91cmxU
aXRsZSA9ICIiOworICAgIGVsc2UgaWYgKHR5cGUgPT0gInRleHQvaHRtbCIpCisgICAgICAgIG1f
aHRtbEJhc2VVUkwgPSBLVVJMKCk7Cit9CisKK3ZvaWQgV3JpdGFibGVEYXRhT2JqZWN0OjpjbGVh
ckFsbEV4Y2VwdEZpbGVzKCkKK3sKKyAgICAvLyBUT0RPOiBUaGUgc3BlYyBkb2VzIG5vdCBwcm92
aWRlIGEgd2F5IHRvIHBvcHVsYXRlIEZpbGVMaXN0IGN1cnJlbnRseS4gSW4KKyAgICAvLyBmYWN0
LCB0aGUgc3BlYyBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IGRyYWdnaW5nIGZpbGVzIGNhbiBvbmx5
IGhhcHBlbiBmcm9tCisgICAgLy8gb3V0c2lkZSBhIGJyb3dzaW5nIGNvbnRleHQuCisgICAgY2xl
YXIoKTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OmNsZWFyKCkKK3sKKyAgICBtX2Rh
dGFNYXAuY2xlYXIoKTsKKyAgICBtX3VybFRpdGxlID0gIiI7CisgICAgbV9odG1sQmFzZVVSTCA9
IEtVUkwoKTsKKyAgICBtX2ZpbGVDb250ZW50RmlsZW5hbWUgPSAiIjsKKyAgICBpZiAobV9maWxl
Q29udGVudCkKKyAgICAgICAgbV9maWxlQ29udGVudC0+Y2xlYXIoKTsKK30KKworYm9vbCBXcml0
YWJsZURhdGFPYmplY3Q6Omhhc0RhdGEoKSBjb25zdAoreworICAgIHJldHVybiAhbV9kYXRhTWFw
LmlzRW1wdHkoKSB8fCAobV9maWxlQ29udGVudCAmJiAhbV9maWxlQ29udGVudC0+aXNFbXB0eSgp
KTsKK30KKworSGFzaFNldDxTdHJpbmc+IFdyaXRhYmxlRGF0YU9iamVjdDo6dHlwZXMoKSBjb25z
dAoreworICAgIEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgZm9yIChIYXNoTWFwPFN0cmlu
ZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFNYXAuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ICE9IG1fZGF0YU1hcC5lbmQoKTsgKytpdCkgeworICAgICAgICByZXN1bHQuYWRkKGl0
LT5maXJzdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBXcml0YWJs
ZURhdGFPYmplY3Q6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZWVkZWQp
IGNvbnN0Cit7CisgICAgLy8gVE9ETzogRm9yIHBhc3RpbmcsIHdlIG5lZWQgdG8gcmVhZCBkaXJl
Y3RseSBmcm9tIHRoZSBwYXN0ZWJvYXJkLiBSaWdodAorICAgIC8vIG5vdywgQ2xpcGJvYXJkOjpn
ZXREYXRhIGRvZXNuJ3QgYWxsb3cgcmVhZHMgd2hlbiB0aGUgY2xpcGJvYXJkIGlzCisgICAgLy8g
d3JpdGFibGUsIGJ1dCB3ZSBoYXZlIG1heSB0byBhZGRyZXNzIHRoaXMgaW4gdGhlIGZ1dHVyZS4K
KyAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFN
YXAuZmluZCh0eXBlKTsKKyAgICBpZiAoaXQgIT0gbV9kYXRhTWFwLmVuZCgpKSB7CisgICAgICAg
IHN1Y2NlZWRlZCA9IHRydWU7CisgICAgICAgIHJldHVybiBpdC0+c2Vjb25kOworICAgIH0KKyAg
ICBzdWNjZWVkZWQgPSBmYWxzZTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgV3Jp
dGFibGVEYXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKQoreworICAgIGlmICghbV9pc0ZvckRyYWdnaW5nKSB7CisgICAgICAgIENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEodHlwZSwgZGF0YSwgIiIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgbV9kYXRhTWFwLnNldCh0eXBlLCBkYXRhKTsKKyAgICBpZiAo
dHlwZSA9PSAidGV4dC91cmktbGlzdCIpCisgICAgICAgIG1fdXJsVGl0bGUgPSAiIjsKKyAgICBl
bHNlIGlmICh0eXBlID09ICJ0ZXh0L2h0bWwiKQorICAgICAgICBtX2h0bWxCYXNlVVJMID0gS1VS
TCgpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBTcGVjaWFsIGFjY2Vzc29ycyBmb3IgVVJM
IGFuZCBIVE1MIHNpbmNlIHRoZXkgY2FycnkgYWRkaXRpb25hbAorLy8gbWV0YWRhdGEuCitTdHJp
bmcgV3JpdGFibGVEYXRhT2JqZWN0OjpnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAg
ICBpZiAodGl0bGUpCisgICAgICAgICp0aXRsZSA9IG1fdXJsVGl0bGU7CisgICAgYm9vbCBpZ25v
cmVkU3VjY2VzczsKKyAgICByZXR1cm4gZ2V0RGF0YSgidGV4dC91cmktbGlzdCIsIGlnbm9yZWRT
dWNjZXNzKTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldFVSTChjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyAgICBzZXREYXRhKCJ0ZXh0L3VyaS1s
aXN0IiwgdXJsKTsKKyAgICBtX3VybFRpdGxlID0gdGl0bGU7Cit9CisKK1N0cmluZyBXcml0YWJs
ZURhdGFPYmplY3Q6OmdldEhUTUwoU3RyaW5nKiBiYXNlVVJMKSBjb25zdAoreworICAgIGlmIChi
YXNlVVJMKQorICAgICAgICAqYmFzZVVSTCA9IG1faHRtbEJhc2VVUkw7CisgICAgYm9vbCBpZ25v
cmVkU3VjY2VzczsKKyAgICByZXR1cm4gZ2V0RGF0YSgidGV4dC9odG1sIiwgaWdub3JlZFN1Y2Nl
c3MpOworfQorCit2b2lkIFdyaXRhYmxlRGF0YU9iamVjdDo6c2V0SFRNTChjb25zdCBTdHJpbmcm
IGh0bWwsIGNvbnN0IEtVUkwmIGJhc2VVUkwpCit7CisgICAgc2V0RGF0YSgidGV4dC9odG1sIiwg
aHRtbCk7CisgICAgbV9odG1sQmFzZVVSTCA9IGJhc2VVUkw7Cit9CisKK2Jvb2wgV3JpdGFibGVE
YXRhT2JqZWN0OjpoYXNGaWxlbmFtZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworVmVjdG9yPFN0cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlbmFtZXMoKSBjb25zdAor
eworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworfQorCisvLyBBY2Nlc3NvcnMgdXNlZCB3
aGVuIHRyYW5zZmVycmluZyBkcmFnIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlCisvLyBi
cm93c2VyLgorSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gV3JpdGFibGVEYXRhT2JqZWN0OjpkYXRh
TWFwKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhTWFwOworfQorCitTdHJpbmcgV3JpdGFi
bGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdXJsVGl0bGU7
Cit9CisKK0tVUkwgV3JpdGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVSTCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1faHRtbEJhc2VVUkw7Cit9CisKKy8vIFVzZWQgZm9yIHRyYW5zZmVycmluZyBm
aWxlIGRhdGEgZnJvbSB0aGUgcmVuZGVyZXIgdG8gdGhlIGJyb3dzZXIuCitTdHJpbmcgV3JpdGFi
bGVEYXRhT2JqZWN0OjpmaWxlRXh0ZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxl
RXh0ZW5zaW9uOworfQorCitTdHJpbmcgV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVudEZp
bGVuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9maWxlQ29udGVudEZpbGVuYW1lOworfQor
CitQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gV3JpdGFibGVEYXRhT2JqZWN0OjpmaWxlQ29udGVu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZmlsZUNvbnRlbnQ7Cit9CisKK3ZvaWQgV3JpdGFi
bGVEYXRhT2JqZWN0OjpzZXRGaWxlRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lv
bikKK3sKKyAgICBtX2ZpbGVFeHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOworfQorCit2b2lkIFdy
aXRhYmxlRGF0YU9iamVjdDo6c2V0RmlsZUNvbnRlbnRGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZp
bGVDb250ZW50RmlsZW5hbWUpCit7CisgICAgbV9maWxlQ29udGVudEZpbGVuYW1lID0gZmlsZUNv
bnRlbnRGaWxlbmFtZTsKK30KKwordm9pZCBXcml0YWJsZURhdGFPYmplY3Q6OnNldEZpbGVDb250
ZW50KFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBmaWxlQ29udGVudCkKK3sKKyAgICBtX2ZpbGVD
b250ZW50ID0gZmlsZUNvbnRlbnQ7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFPYmplY3QuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTA0ZWEwN2NjZTVhMzRlZDI0ODQzYzcxYTJmNjIxNjhkZGUxZmIyMQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmgKQEAg
LTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCwgMjAwOSwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdyaXRhYmxlRGF0YU9iamVjdF9oCisjZGVmaW5l
IFdyaXRhYmxlRGF0YU9iamVjdF9oCisKKyNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2VkIGZvciBvbmUgd2F5IGNvbW11bmljYXRp
b24gb2YgZHJhZy9kcm9wIGFuZCBjb3B5L3Bhc3RlIGRhdGEgZnJvbSB0aGUKKy8vIHJlbmRlcmVy
IHRvIHRoZSBicm93c2VyLiBUaGlzIGlzIGludGVudGVkZWQgdG8gYmUgdXNlZCBpbiBkcmFnc3Rh
cnQvY29weS9jdXQKKy8vIGV2ZW50cy4gRHVlIHRvIHNob3J0Y29taW5ncywgd3JpdGVzIHRvIHRo
ZSBjbGlwYm9hcmQgY2Fubm90IGJlIHBlcmZvcm1lZAorLy8gYXRvbWljYWxseS4KK2NsYXNzIFdy
aXRhYmxlRGF0YU9iamVjdCA6IHB1YmxpYyBDaHJvbWl1bURhdGFPYmplY3QgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdyaXRhYmxlRGF0YU9iamVjdD4gY3JlYXRlKGJvb2wgaXNG
b3JEcmFnZ2luZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRXhjZXB0RmlsZXMoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpIGNvbnN0OworICAg
IHZpcnR1YWwgSGFzaFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHN1Y2NlZWRlZCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIHNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IGRhdGEpOworCisgICAgLy8gU3BlY2lhbCBhY2Nlc3NvcnMgZm9yIFVSTCBhbmQgSFRNTCBzaW5j
ZSB0aGV5IGNhcnJ5IGFkZGl0aW9uYWwKKyAgICAvLyBtZXRhZGF0YS4KKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFVS
TChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0SFRNTChTdHJpbmcqIGJhc2VVUkwpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBz
ZXRIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgY29uc3QgS1VSTCYgYmFzZVVSTCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzRmlsZW5hbWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBWZWN0b3I8U3Ry
aW5nPiBmaWxlbmFtZXMoKSBjb25zdDsKKworICAgIC8vIEFjY2Vzc29ycyB1c2VkIHdoZW4gdHJh
bnNmZXJyaW5nIGRyYWcgZGF0YSBmcm9tIHRoZSByZW5kZXJlciB0byB0aGUKKyAgICAvLyBicm93
c2VyLgorICAgIHZpcnR1YWwgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gZGF0YU1hcCgpIGNvbnN0
OworICAgIHZpcnR1YWwgU3RyaW5nIHVybFRpdGxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBLVVJM
IGh0bWxCYXNlVVJMKCkgY29uc3Q7CisKKyAgICAvLyBVc2VkIGZvciB0cmFuc2ZlcnJpbmcgZmls
ZSBkYXRhIGZyb20gdGhlIHJlbmRlcmVyIHRvIHRoZSBicm93c2VyLgorICAgIHZpcnR1YWwgU3Ry
aW5nIGZpbGVFeHRlbnNpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlQ29udGVu
dEZpbGVuYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZmlsZUNvbnRlbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlbmFtZShj
b25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZUNvbnRlbnQoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+KTsKKworcHJpdmF0ZToKKyAgICBXcml0YWJsZURhdGFPYmplY3QoYm9v
bCBpc0ZvckRyYWdnaW5nKTsKKworICAgIGJvb2wgbV9pc0ZvckRyYWdnaW5nOworCisgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gbV9kYXRhTWFwOworICAgIFN0cmluZyBtX3VybFRpdGxlOwor
ICAgIEtVUkwgbV9odG1sQmFzZVVSTDsKKyAgICBTdHJpbmcgbV9maWxlRXh0ZW5zaW9uOworICAg
IFN0cmluZyBtX2ZpbGVDb250ZW50RmlsZW5hbWU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
bV9maWxlQ29udGVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA5MGQ5NDYwYjA0YjUxYjFhZjJhN2UxZTg5ZjdjYmJmMDM2ODZlZWExLi4y
YzRlMGU1MWZjMzVjNzYyNzI4MGI3MjQ4MGYyYzAxNjY5YmUzYzFjIDEwMDY0NAotLS0gYS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzMyBAQAorMjAxMC0wOC0zMCAgRGFuaWVsIENoZW5nICA8ZGNoZW5nQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
Y2hyb21pdW1dIEFkZCBzdXBwb3J0IGZvciBub24tdGV4dC9ub24tVVJMIHR5cGVzIGluIGV2ZW50
LmRhdGFUcmFuc2ZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDQ3MjcKKworICAgICAgICBVcGRhdGUgV2ViS2l0IHJlbmRlcmVyIDwtPiBicm93c2Vy
IGJpbmRpbmdzIGZvciBoYW5kbGluZyBjb3B5L3Bhc3RlIGFuZAorICAgICAgICBkcmFnL2Ryb3Au
IEluIHBhcnRpY3VsYXI6CisgICAgICAgIDEpIERyYWcgZGF0YSBpcyBubyBsb25nZXIgcGFzc2Vk
IHdoZW4gYSBkcmFnIHRhcmdldCBpcyBlbnRlcmVkLiBBbGwgdGhhdAorICAgICAgICAgICBpbmZv
cm1hdGlvbiBpcyByZXRyaWV2ZWQgdGhyb3VnaCBJUENzIHRvIHRoZSBicm93c2VyLgorICAgICAg
ICAyKSBXZWJEcmFnRGF0YSBoYXMgYmVlbiBjaGFuZ2VkLS1pdCBpcyBub3cgb25seSByZXNwb25z
aWJsZSBmb3IKKyAgICAgICAgICAgdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSBhIHdlYiBkcmFnIHNv
dXJjZSBpbiB0aGUgcmVuZGVyZXIgdG8gdGhlCisgICAgICAgICAgIGJyb3dzZXIuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgor
ICAgICAgICAqIHNyYy9XZWJEcmFnRGF0YS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdE
YXRhOjpkYXRhTWFwKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OnVybFRpdGxlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24pOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnRGF0YTo6aHRtbEJhc2VVUkwpOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnRGF0YTo6ZmlsZUNvbnRlbnRGaWxlTmFtZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdE
YXRhOjpmaWxlQ29udGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdEYXRhOjpoYXNGaWxl
bmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnRGF0YTo6ZmlsZW5hbWVzKToKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
ZHJhZ1RhcmdldERyYWdFbnRlcik6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisKIDIw
MTAtMDgtMzAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2NjE5OC4KZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViRHJhZ0RhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViRHJhZ0RhdGEuaAppbmRleCAyOTc5NTE5YjE2MjViNmI4ODAyZGYzYTJhODE0NGRlODEyMGVh
YWQzLi4yNmZiNzEzODhiNmY1ZjU4YjA4ZWUyNjYwODE1YTY3ODhhNDMxYWY2IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkRyYWdEYXRhLmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJEcmFnRGF0YS5oCkBAIC00Niw4ICs0Niw4IEBAIGNsYXNzIFdlYlN0cmlu
ZzsKIGNsYXNzIFdlYlVSTDsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7
CiAKLS8vIEhvbGRzIGRhdGEgdGhhdCBtYXkgYmUgZXhjaGFuZ2VkIHRocm91Z2ggYSBkcmFnLW4t
ZHJvcCBvcGVyYXRpb24uICBJdCBpcwotLy8gaW5leHBlbnNpdmUgdG8gY29weSBhIFdlYkRyYWdE
YXRhIG9iamVjdC4KKy8vIEhvbGRzIGRhdGEgdGhhdCBtYXkgYmUgZXhjaGFuZ2VkIHRocm91Z2gg
YSBkcmFnLW4tZHJvcCBvcGVyYXRpb24gc3RhcnRlZCBpbgorLy8gdGhlIHJlbmRlcmVyLgogY2xh
c3MgV2ViRHJhZ0RhdGEgewogcHVibGljOgogICAgIH5XZWJEcmFnRGF0YSgpIHsgcmVzZXQoKTsg
fQpAQCAtNjAsNDMgKzYwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
IH0KIAotICAgIFdFQktJVF9BUEkgdm9pZCBpbml0aWFsaXplKCk7CiAgICAgV0VCS0lUX0FQSSB2
b2lkIHJlc2V0KCk7CiAgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJEcmFnRGF0
YSYpOwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CiAK
LSAgICBXRUJLSVRfQVBJIFdlYlVSTCB1cmwoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQg
c2V0VVJMKGNvbnN0IFdlYlVSTCYpOwotCisgICAgV0VCS0lUX0FQSSB2b2lkIGRhdGFNYXAoV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIHR5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBkYXRhKSBjb25zdDsKICAgICBXRUJLSVRfQVBJIFdlYlN0cmlu
ZyB1cmxUaXRsZSgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBzZXRVUkxUaXRsZShjb25z
dCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGRvd25sb2FkTWV0YWRh
dGEoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RG93bmxvYWRNZXRhZGF0YShjb25z
dCBXZWJTdHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGZpbGVFeHRlbnNpb24o
KSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RmlsZUV4dGVuc2lvbihjb25zdCBXZWJT
dHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgYm9vbCBoYXNGaWxlTmFtZXMoKSBjb25zdDsKLSAg
ICBXRUJLSVRfQVBJIHZvaWQgZmlsZU5hbWVzKFdlYlZlY3RvcjxXZWJTdHJpbmc+JikgY29uc3Q7
Ci0gICAgV0VCS0lUX0FQSSB2b2lkIHNldEZpbGVOYW1lcyhjb25zdCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiYpOwotICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJT
dHJpbmcmKTsKLQotICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIHBsYWluVGV4dCgpIGNvbnN0Owot
ICAgIFdFQktJVF9BUEkgdm9pZCBzZXRQbGFpblRleHQoY29uc3QgV2ViU3RyaW5nJik7Ci0KLSAg
ICBXRUJLSVRfQVBJIFdlYlN0cmluZyBodG1sVGV4dCgpIGNvbnN0OwotICAgIFdFQktJVF9BUEkg
dm9pZCBzZXRIVE1MVGV4dChjb25zdCBXZWJTdHJpbmcmKTsKLQogICAgIFdFQktJVF9BUEkgV2Vi
VVJMIGh0bWxCYXNlVVJMKCkgY29uc3Q7Ci0gICAgV0VCS0lUX0FQSSB2b2lkIHNldEhUTUxCYXNl
VVJMKGNvbnN0IFdlYlVSTCYpOwotCisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgZmlsZUV4dGVu
c2lvbigpIGNvbnN0OwogICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGZpbGVDb250ZW50RmlsZU5h
bWUoKSBjb25zdDsKLSAgICBXRUJLSVRfQVBJIHZvaWQgc2V0RmlsZUNvbnRlbnRGaWxlTmFtZShj
b25zdCBXZWJTdHJpbmcmKTsKLQogICAgIFdFQktJVF9BUEkgV2ViRGF0YSBmaWxlQ29udGVudCgp
IGNvbnN0OwotICAgIFdFQktJVF9BUEkgdm9pZCBzZXRGaWxlQ29udGVudChjb25zdCBXZWJEYXRh
Jik7CisKKyAgICAvLyBFeHBvc2VkIGZvciBXZWJQbHVnaW5EZWxlZ2F0ZVByb3h5CisgICAgV0VC
S0lUX0FQSSBib29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViVmVj
dG9yPFdlYlN0cmluZz4gZmlsZW5hbWVzKCkgY29uc3Q7CiAKICNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KICAgICBXZWJEcmFnRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Q2hy
b21pdW1EYXRhT2JqZWN0PiYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWaWV3LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRleCAxYjk0ZGEy
ZmQyN2Q0ZjY4NDQ4YmQ1OTIwZTVlZDE4YjQ4NjkxNDY1Li41NmQ0MTBlZjJhZjM0Yzg5MzY3YTk5
NTk3YTU1ZTBhZTc4YzhiNTBjIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlZpZXcuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApAQCAtMTk1LDgg
KzE5NSw3IEBAIHB1YmxpYzoKICAgICAvLyBDYWxsYmFjayBtZXRob2RzIHdoZW4gYSBkcmFnLWFu
ZC1kcm9wIG9wZXJhdGlvbiBpcyB0cnlpbmcgdG8gZHJvcAogICAgIC8vIHNvbWV0aGluZyBvbiB0
aGUgV2ViVmlldy4KICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJhZ1RhcmdldERyYWdF
bnRlcigKLSAgICAgICAgY29uc3QgV2ViRHJhZ0RhdGEmLCBpbnQgaWRlbnRpdHksCi0gICAgICAg
IGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29uc3QgV2ViUG9pbnQmIHNjcmVlblBvaW50
LAorICAgICAgICBpbnQgaWRlbnRpdHksIGNvbnN0IFdlYlBvaW50JiBjbGllbnRQb2ludCwgY29u
c3QgV2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgICAgICBXZWJEcmFnT3BlcmF0aW9uc01hc2sg
b3BlcmF0aW9uc0FsbG93ZWQpID0gMDsKICAgICB2aXJ0dWFsIFdlYkRyYWdPcGVyYXRpb24gZHJh
Z1RhcmdldERyYWdPdmVyKAogICAgICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsIGNv
bnN0IFdlYlBvaW50JiBzY3JlZW5Qb2ludCwKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRHJhZ0RhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAK
aW5kZXggNjQzYzM1ZDAwNzNlZjU5NWU3NmUwYjE2ZmM3ZDc0NjJhNmRkNmJjMC4uNjI0ZmJmZTJl
OWJiOGM5M2JiNzA4NGM1NjJlMmYyMjlhNmE4NGY2NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJEcmFnRGF0YS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEcmFn
RGF0YS5jcHAKQEAgLTQ2LDExICs0Niw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2Vi
RHJhZ0RhdGFQcml2YXRlIDogcHVibGljIENocm9taXVtRGF0YU9iamVjdCB7CiB9OwogCi12b2lk
IFdlYkRyYWdEYXRhOjppbml0aWFsaXplKCkKLXsKLSAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2Vi
RHJhZ0RhdGFQcml2YXRlKj4oQ2hyb21pdW1EYXRhT2JqZWN0OjpjcmVhdGUoKS5yZWxlYXNlUmVm
KCkpKTsKLX0KLQogdm9pZCBXZWJEcmFnRGF0YTo6cmVzZXQoKQogewogICAgIGFzc2lnbigwKTsK
QEAgLTY0LDEzNyArNTksNjEgQEAgdm9pZCBXZWJEcmFnRGF0YTo6YXNzaWduKGNvbnN0IFdlYkRy
YWdEYXRhJiBvdGhlcikKICAgICBhc3NpZ24ocCk7CiB9CiAKLVdlYlVSTCBXZWJEcmFnRGF0YTo6
dXJsKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2
YXRlLT5nZXRVUkwoKTsKLX0KLQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0VVJMKGNvbnN0IFdlYlVS
TCYgdXJsKQordm9pZCBXZWJEcmFnRGF0YTo6ZGF0YU1hcChXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
dHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBk
YXRhKSBjb25zdAogewotICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPnNldFVS
TCh1cmwpOworICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBtYXAgPSBtX3ByaXZh
dGUtPmRhdGFNYXAoKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPihzdGF0aWNfY2FzdDxzaXpl
X3Q+KG1hcC5zaXplKCkpKS5zd2FwKHR5cGVzKTsKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPihz
dGF0aWNfY2FzdDxzaXplX3Q+KG1hcC5zaXplKCkpKS5zd2FwKGRhdGEpOworICAgIGludCBpID0g
MDsKKyAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IG1hcC5iZWdpbigpOworICAgICAgICAgaXQgIT0gbWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAg
IHR5cGVzW2ldID0gaXQtPmZpcnN0OworICAgICAgICBkYXRhW2ldID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaSsrOworICAgIH0KIH0KIAogV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjp1cmxUaXRsZSgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+
dXJsVGl0bGU7Ci19Ci0KLXZvaWQgV2ViRHJhZ0RhdGE6OnNldFVSTFRpdGxlKGNvbnN0IFdlYlN0
cmluZyYgdXJsVGl0bGUpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+
dXJsVGl0bGUgPSB1cmxUaXRsZTsKLX0KLQotV2ViU3RyaW5nIFdlYkRyYWdEYXRhOjpkb3dubG9h
ZE1ldGFkYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5kb3dubG9hZE1ldGFkYXRhOwotfQotCi12b2lkIFdlYkRyYWdEYXRhOjpzZXRE
b3dubG9hZE1ldGFkYXRhKGNvbnN0IFdlYlN0cmluZyYgZG93bmxvYWRNZXRhZGF0YSkKLXsKLSAg
ICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT5kb3dubG9hZE1ldGFkYXRhID0gZG93
bmxvYWRNZXRhZGF0YTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT51cmxUaXRsZSgpOwogfQogCiBX
ZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVFeHRlbnNpb24oKSBjb25zdAogewogICAgIEFTU0VS
VCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb247Ci19Ci0K
LXZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVFeHRlbnNpb24oY29uc3QgV2ViU3RyaW5nJiBmaWxl
RXh0ZW5zaW9uKQotewotICAgIGVuc3VyZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVF
eHRlbnNpb24gPSBmaWxlRXh0ZW5zaW9uOwotfQotCi1ib29sIFdlYkRyYWdEYXRhOjpoYXNGaWxl
TmFtZXMoKSBjb25zdAotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiAhbV9w
cml2YXRlLT5maWxlbmFtZXMuaXNFbXB0eSgpOwotfQotCi12b2lkIFdlYkRyYWdEYXRhOjpmaWxl
TmFtZXMoV2ViVmVjdG9yPFdlYlN0cmluZz4mIGZpbGVOYW1lcykgY29uc3QKLXsKLSAgICBBU1NF
UlQoIWlzTnVsbCgpKTsKLSAgICBmaWxlTmFtZXMgPSBtX3ByaXZhdGUtPmZpbGVuYW1lczsKLX0K
LQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0RmlsZU5hbWVzKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJp
bmc+JiBmaWxlTmFtZXMpCi17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+
ZmlsZW5hbWVzLmNsZWFyKCk7Ci0gICAgbV9wcml2YXRlLT5maWxlbmFtZXMuYXBwZW5kKGZpbGVO
YW1lcy5kYXRhKCksIGZpbGVOYW1lcy5zaXplKCkpOwotfQotCi12b2lkIFdlYkRyYWdEYXRhOjph
cHBlbmRUb0ZpbGVOYW1lcyhjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQotewotICAgIGVuc3Vy
ZU11dGFibGUoKTsKLSAgICBtX3ByaXZhdGUtPmZpbGVuYW1lcy5hcHBlbmQoZmlsZU5hbWUpOwot
fQotCi1XZWJTdHJpbmcgV2ViRHJhZ0RhdGE6OnBsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+cGxhaW5UZXh0OwotfQotCi12
b2lkIFdlYkRyYWdEYXRhOjpzZXRQbGFpblRleHQoY29uc3QgV2ViU3RyaW5nJiBwbGFpblRleHQp
Ci17Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+cGxhaW5UZXh0ID0gcGxh
aW5UZXh0OwotfQotCi1XZWJTdHJpbmcgV2ViRHJhZ0RhdGE6Omh0bWxUZXh0KCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIWlzTnVsbCgpKTsKLSAgICByZXR1cm4gbV9wcml2YXRlLT50ZXh0SHRtbDsK
LX0KLQotdm9pZCBXZWJEcmFnRGF0YTo6c2V0SFRNTFRleHQoY29uc3QgV2ViU3RyaW5nJiBodG1s
VGV4dCkKLXsKLSAgICBlbnN1cmVNdXRhYmxlKCk7Ci0gICAgbV9wcml2YXRlLT50ZXh0SHRtbCA9
IGh0bWxUZXh0OworICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVFeHRlbnNpb24oKTsKIH0KIAog
V2ViVVJMIFdlYkRyYWdEYXRhOjpodG1sQmFzZVVSTCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFp
c051bGwoKSk7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+aHRtbEJhc2VVcmw7Ci19Ci0KLXZvaWQg
V2ViRHJhZ0RhdGE6OnNldEhUTUxCYXNlVVJMKGNvbnN0IFdlYlVSTCYgaHRtbEJhc2VVUkwpCi17
Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+aHRtbEJhc2VVcmwgPSBodG1s
QmFzZVVSTDsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5odG1sQmFzZVVSTCgpOwogfQogCiBXZWJT
dHJpbmcgV2ViRHJhZ0RhdGE6OmZpbGVDb250ZW50RmlsZU5hbWUoKSBjb25zdAogewogICAgIEFT
U0VSVCghaXNOdWxsKCkpOwotICAgIHJldHVybiBtX3ByaXZhdGUtPmZpbGVDb250ZW50RmlsZW5h
bWU7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSgpOwogfQogCi12
b2lkIFdlYkRyYWdEYXRhOjpzZXRGaWxlQ29udGVudEZpbGVOYW1lKGNvbnN0IFdlYlN0cmluZyYg
ZmlsZU5hbWUpCitXZWJEYXRhIFdlYkRyYWdEYXRhOjpmaWxlQ29udGVudCgpIGNvbnN0CiB7Ci0g
ICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnRGaWxlbmFtZSA9
IGZpbGVOYW1lOworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBXZWJEYXRhKG1f
cHJpdmF0ZS0+ZmlsZUNvbnRlbnQoKSk7CiB9CiAKLVdlYkRhdGEgV2ViRHJhZ0RhdGE6OmZpbGVD
b250ZW50KCkgY29uc3QKK2Jvb2wgV2ViRHJhZ0RhdGE6Omhhc0ZpbGVuYW1lcygpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFpc051bGwoKSk7Ci0gICAgcmV0dXJuIFdlYkRhdGEobV9wcml2YXRlLT5m
aWxlQ29udGVudCk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aGFzRmlsZW5hbWVzKCk7CiB9CiAK
LXZvaWQgV2ViRHJhZ0RhdGE6OnNldEZpbGVDb250ZW50KGNvbnN0IFdlYkRhdGEmIGZpbGVDb250
ZW50KQorV2ViVmVjdG9yPFdlYlN0cmluZz4gV2ViRHJhZ0RhdGE6OmZpbGVuYW1lcygpIGNvbnN0
CiB7Ci0gICAgZW5zdXJlTXV0YWJsZSgpOwotICAgIG1fcHJpdmF0ZS0+ZmlsZUNvbnRlbnQgPSBm
aWxlQ29udGVudDsKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5maWxlbmFtZXMoKTsKIH0KIAogV2ViRHJhZ0RhdGE6OldlYkRyYWdEYXRhKGNvbnN0IFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3Q+JiBkYXRhKQpAQCAtMjIxLDEx
ICsxNDAsNCBAQCB2b2lkIFdlYkRyYWdEYXRhOjphc3NpZ24oV2ViRHJhZ0RhdGFQcml2YXRlKiBw
KQogICAgIG1fcHJpdmF0ZSA9IHA7CiB9CiAKLXZvaWQgV2ViRHJhZ0RhdGE6OmVuc3VyZU11dGFi
bGUoKQotewotICAgIEFTU0VSVCghaXNOdWxsKCkpOwotICAgIGlmICghbV9wcml2YXRlLT5oYXNP
bmVSZWYoKSkKLSAgICAgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkRyYWdEYXRhUHJpdmF0ZSo+
KG1fcHJpdmF0ZS0+Y29weSgpLnJlbGVhc2VSZWYoKSkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNTA2NWY1ZWI5YjY0MDgz
ZmMzYjFlMTc0ZjQyODE1YzU3MzdiNDgzOS4uNTQ5ZmFiYzQ5MjNmNDRjMDVmMTdlYTgzYWQ3NjI1
OWUyNTdkMjM0YSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTgxLDYgKzgx
LDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlBvcHVwTWVu
dUNsaWVudC5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgIlJlYWRh
YmxlRGF0YU9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC0xNTY5LDE0ICsx
NTcwLDE0IEBAIHZvaWQgV2ViVmlld0ltcGw6OmRyYWdTb3VyY2VTeXN0ZW1EcmFnRW5kZWQoKQog
fQogCiBXZWJEcmFnT3BlcmF0aW9uIFdlYlZpZXdJbXBsOjpkcmFnVGFyZ2V0RHJhZ0VudGVyKAot
ICAgIGNvbnN0IFdlYkRyYWdEYXRhJiB3ZWJEcmFnRGF0YSwgaW50IGlkZW50aXR5LAorICAgIGlu
dCBpZGVudGl0eSwKICAgICBjb25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgY29uc3Qg
V2ViUG9pbnQmIHNjcmVlblBvaW50LAogICAgIFdlYkRyYWdPcGVyYXRpb25zTWFzayBvcGVyYXRp
b25zQWxsb3dlZCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudERyYWdEYXRhLmdldCgpKTsKIAot
ICAgIG1fY3VycmVudERyYWdEYXRhID0gd2ViRHJhZ0RhdGE7CisgICAgbV9jdXJyZW50RHJhZ0Rh
dGEgPSBSZWFkYWJsZURhdGFPYmplY3Q6OmNyZWF0ZSh0cnVlKTsKICAgICBtX2RyYWdJZGVudGl0
eSA9IGlkZW50aXR5OwogICAgIG1fb3BlcmF0aW9uc0FsbG93ZWQgPSBvcGVyYXRpb25zQWxsb3dl
ZDsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGMyOTYxMjEyM2Y0NTE0Yzk0ZGQ3
ZDk3MGM3MzExNGE0YmVlZWMzNTUuLjY1OTkyYTEwODRkMDBiMGYxYjZlZTA0YjlmYjFhYWIyY2Uz
NTNhNzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKQEAgLTE0NCw3ICsxNDQsNyBAQCBw
dWJsaWM6CiAgICAgICAgIFdlYkRyYWdPcGVyYXRpb24gb3BlcmF0aW9uKTsKICAgICB2aXJ0dWFs
IHZvaWQgZHJhZ1NvdXJjZVN5c3RlbURyYWdFbmRlZCgpOwogICAgIHZpcnR1YWwgV2ViRHJhZ09w
ZXJhdGlvbiBkcmFnVGFyZ2V0RHJhZ0VudGVyKAotICAgICAgICBjb25zdCBXZWJEcmFnRGF0YSYg
ZHJhZ0RhdGEsIGludCBpZGVudGl0eSwKKyAgICAgICAgaW50IGlkZW50aXR5LAogICAgICAgICBj
b25zdCBXZWJQb2ludCYgY2xpZW50UG9pbnQsCiAgICAgICAgIGNvbnN0IFdlYlBvaW50JiBzY3Jl
ZW5Qb2ludCwKICAgICAgICAgV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG9wZXJhdGlvbnNBbGxvd2Vk
KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZwppbmRleCA5N2NkYjlmOWZmY2Q0OWYxYzJhNDU0ZDQyMTI1MjQzMGRhOWIxZDRlLi44ZWJj
MGYyNzJhMWUzNDllNDg4Nzg4MDM1ZGYzYjAzNTljZTMyMDE1IDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTAtMDgtMzAgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBB
ZGQgc3VwcG9ydCBmb3Igbm9uLXRleHQvbm9uLVVSTCB0eXBlcyBpbiBldmVudC5kYXRhVHJhbnNm
ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NzI3
CisKKyAgICAgICAgVXBkYXRlcyBjaHJvbWl1bSdzIERSVCBpbXBsZW1lbnRhdGlvbiB0byBzdXBw
b3J0IHRoZSBuZXcgV2ViQ2xpcGJvYXJkCisgICAgICAgIGludGVyZmFjZS4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcDoKKyAgICAgICAgKEV2ZW50
U2VuZGVyOjpyZXNldCk6CisgICAgICAgIChFdmVudFNlbmRlcjo6ZG9EcmFnRHJvcCk6CisgICAg
ICAgIChFdmVudFNlbmRlcjo6ZG9Nb3VzZVVwKToKKyAgICAgICAgKEV2ZW50U2VuZGVyOjpkb01v
dXNlTW92ZSk6CisgICAgICAgIChFdmVudFNlbmRlcjo6YmVnaW5EcmFnV2l0aEZpbGVzKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5oOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKGFkZERS
VEZha2VGaWxlVG9EYXRhT2JqZWN0KToKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpzdGFydERyYWdn
aW5nKToKKwogMjAxMC0wOC0zMCAgWm9sdGFuIEhvcnZhdGggIDx6b2x0YW5Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNw
cCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcApp
bmRleCBiNmI4ZDZlM2ZlYmEwMGM3YTIzYThlNDBjMDZjZjM1ZGMzZjFkNDYxLi5jZmUwNTAzZWRh
YzViZmEyMGYzMzViMmNjYWRjYjdkZmQzYTU1NTE2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCkBAIC00NiwxMSArNDYsMTQg
QEAKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKICNpbmNsdWRlICJwdWJsaWMvV2ViRHJhZ0RhdGEu
aCIKICNpbmNsdWRlICJwdWJsaWMvV2ViRHJhZ09wZXJhdGlvbi5oIgorI2luY2x1ZGUgInB1Ymxp
Yy9XZWJLaXQuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViS2l0Q2xpZW50LmgiCiAjaW5jbHVkZSAi
cHVibGljL1dlYlBvaW50LmgiCiAjaW5jbHVkZSAicHVibGljL1dlYlN0cmluZy5oIgogI2luY2x1
ZGUgInB1YmxpYy9XZWJUb3VjaFBvaW50LmgiCiAjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIK
ICNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorI2luY2x1ZGUgIndl
YmtpdC90b29scy90ZXN0X3NoZWxsL21vY2tfd2ViY2xpcGJvYXJkX2ltcGwuaCIKICNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAKQEAgLTg2LDcg
Kzg5LDcgQEAgc3RydWN0IFNhdmVkRXZlbnQgewogICAgICAgICAsIG1pbGxpc2Vjb25kcygwKSB7
fQogfTsKIAotc3RhdGljIFdlYkRyYWdEYXRhIGN1cnJlbnREcmFnRGF0YTsKK3N0YXRpYyBib29s
IGlzSW5EcmFnID0gZmFsc2U7CiBzdGF0aWMgV2ViRHJhZ09wZXJhdGlvbiBjdXJyZW50RHJhZ0Vm
ZmVjdDsKIHN0YXRpYyBXZWJEcmFnT3BlcmF0aW9uc01hc2sgY3VycmVudERyYWdFZmZlY3RzQWxs
b3dlZDsKIHN0YXRpYyBib29sIHJlcGxheWluZ1NhdmVkRXZlbnRzID0gZmFsc2U7CkBAIC0yOTcs
OCArMzAwLDggQEAgRXZlbnRTZW5kZXI6OkV2ZW50U2VuZGVyKFRlc3RTaGVsbCogc2hlbGwpCiB2
b2lkIEV2ZW50U2VuZGVyOjpyZXNldCgpCiB7CiAgICAgLy8gVGhlIHRlc3Qgc2hvdWxkIGhhdmUg
ZmluaXNoZWQgYSBkcmFnIGFuZCB0aGUgbW91c2UgYnV0dG9uIHN0YXRlLgotICAgIEFTU0VSVChj
dXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpOwotICAgIGN1cnJlbnREcmFnRGF0YS5yZXNldCgpOwor
ICAgIEFTU0VSVCghaXNJbkRyYWcpOworICAgIGlzSW5EcmFnID0gZmFsc2U7CiAgICAgY3VycmVu
dERyYWdFZmZlY3QgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Ob25lOwogICAgIGN1cnJlbnRE
cmFnRWZmZWN0c0FsbG93ZWQgPSBXZWJLaXQ6OldlYkRyYWdPcGVyYXRpb25Ob25lOwogICAgIHBy
ZXNzZWRCdXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25lOwpAQCAtMzI5LDE1ICszMzIs
MTUgQEAgV2ViVmlldyogRXZlbnRTZW5kZXI6OndlYnZpZXcoKQogICAgIHJldHVybiBtX3NoZWxs
LT53ZWJWaWV3KCk7CiB9CiAKLXZvaWQgRXZlbnRTZW5kZXI6OmRvRHJhZ0Ryb3AoY29uc3QgV2Vi
RHJhZ0RhdGEmIGRyYWdEYXRhLCBXZWJEcmFnT3BlcmF0aW9uc01hc2sgbWFzaykKK3ZvaWQgRXZl
bnRTZW5kZXI6OmRvRHJhZ0Ryb3AoV2ViRHJhZ09wZXJhdGlvbnNNYXNrIG1hc2spCiB7CiAgICAg
V2ViTW91c2VFdmVudCBldmVudDsKICAgICBpbml0TW91c2VFdmVudChXZWJJbnB1dEV2ZW50OjpN
b3VzZURvd24sIHByZXNzZWRCdXR0b24sIGxhc3RNb3VzZVBvcywgJmV2ZW50KTsKICAgICBXZWJQ
b2ludCBjbGllbnRQb2ludChldmVudC54LCBldmVudC55KTsKICAgICBXZWJQb2ludCBzY3JlZW5Q
b2ludChldmVudC5nbG9iYWxYLCBldmVudC5nbG9iYWxZKTsKLSAgICBjdXJyZW50RHJhZ0RhdGEg
PSBkcmFnRGF0YTsKKyAgICBpc0luRHJhZyA9IHRydWU7CiAgICAgY3VycmVudERyYWdFZmZlY3Rz
QWxsb3dlZCA9IG1hc2s7Ci0gICAgY3VycmVudERyYWdFZmZlY3QgPSB3ZWJ2aWV3KCktPmRyYWdU
YXJnZXREcmFnRW50ZXIoZHJhZ0RhdGEsIDAsIGNsaWVudFBvaW50LCBzY3JlZW5Qb2ludCwgY3Vy
cmVudERyYWdFZmZlY3RzQWxsb3dlZCk7CisgICAgY3VycmVudERyYWdFZmZlY3QgPSB3ZWJ2aWV3
KCktPmRyYWdUYXJnZXREcmFnRW50ZXIoMCwgY2xpZW50UG9pbnQsIHNjcmVlblBvaW50LCBjdXJy
ZW50RHJhZ0VmZmVjdHNBbGxvd2VkKTsKIAogICAgIC8vIEZpbmlzaCBwcm9jZXNzaW5nIGV2ZW50
cy4KICAgICByZXBsYXlTYXZlZEV2ZW50cygpOwpAQCAtNDM0LDcgKzQzNyw3IEBAIHZvaWQgRXZl
bnRTZW5kZXI6OmRvTW91c2VVcChjb25zdCBXZWJNb3VzZUV2ZW50JiBlKQogICAgIGxhc3RDbGlj
a1BvcyA9IGxhc3RNb3VzZVBvczsKIAogICAgIC8vIElmIHdlJ3JlIGluIGEgZHJhZyBvcGVyYXRp
b24sIGNvbXBsZXRlIGl0LgotICAgIGlmIChjdXJyZW50RHJhZ0RhdGEuaXNOdWxsKCkpCisgICAg
aWYgKCFpc0luRHJhZykKICAgICAgICAgcmV0dXJuOwogICAgIFdlYlBvaW50IGNsaWVudFBvaW50
KGUueCwgZS55KTsKICAgICBXZWJQb2ludCBzY3JlZW5Qb2ludChlLmdsb2JhbFgsIGUuZ2xvYmFs
WSk7CkBAIC00NDcsNyArNDUwLDcgQEAgdm9pZCBFdmVudFNlbmRlcjo6ZG9Nb3VzZVVwKGNvbnN0
IFdlYk1vdXNlRXZlbnQmIGUpCiAgICAgd2VidmlldygpLT5kcmFnU291cmNlRW5kZWRBdChjbGll
bnRQb2ludCwgc2NyZWVuUG9pbnQsIGN1cnJlbnREcmFnRWZmZWN0KTsKICAgICB3ZWJ2aWV3KCkt
PmRyYWdTb3VyY2VTeXN0ZW1EcmFnRW5kZWQoKTsKIAotICAgIGN1cnJlbnREcmFnRGF0YS5yZXNl
dCgpOworICAgIGlzSW5EcmFnID0gZmFsc2U7CiB9CiAKIHZvaWQgRXZlbnRTZW5kZXI6Om1vdXNl
TW92ZVRvKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCkBAIC01MDQsNyArNTA3LDcgQEAgdm9pZCBFdmVudFNlbmRlcjo6ZG9Nb3VzZU1vdmUoY29u
c3QgV2ViTW91c2VFdmVudCYgZSkKIAogICAgIHdlYnZpZXcoKS0+aGFuZGxlSW5wdXRFdmVudChl
KTsKIAotICAgIGlmIChwcmVzc2VkQnV0dG9uID09IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmUg
fHwgY3VycmVudERyYWdEYXRhLmlzTnVsbCgpKQorICAgIGlmIChwcmVzc2VkQnV0dG9uID09IFdl
Yk1vdXNlRXZlbnQ6OkJ1dHRvbk5vbmUgfHwgIWlzSW5EcmFnKQogICAgICAgICByZXR1cm47CiAg
ICAgV2ViUG9pbnQgY2xpZW50UG9pbnQoZS54LCBlLnkpOwogICAgIFdlYlBvaW50IHNjcmVlblBv
aW50KGUuZ2xvYmFsWCwgZS5nbG9iYWxZKTsKQEAgLTc3NywxNCArNzgwLDE4IEBAIHZvaWQgRXZl
bnRTZW5kZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzQ2xpY2soY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwCiAKIHZvaWQgRXZlbnRTZW5kZXI6OmJlZ2luRHJhZ1dpdGhGaWxlcyhj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewot
ICAgIGN1cnJlbnREcmFnRGF0YS5pbml0aWFsaXplKCk7CisgICAgTW9ja1dlYkNsaXBib2FyZElt
cGwqIGRyYWdDbGlwYm9hcmQgPQorICAgICAgICBzdGF0aWNfY2FzdDxNb2NrV2ViQ2xpcGJvYXJk
SW1wbCo+KFdlYktpdDo6d2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpKTsKKyAgICBkcmFnQ2xp
cGJvYXJkLT5yZXNldERhdGEoKTsKICAgICBWZWN0b3I8c3RyaW5nPiBmaWxlcyA9IGFyZ3VtZW50
c1swXS50b1N0cmluZ1ZlY3RvcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZXMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGN1cnJlbnREcmFnRGF0YS5hcHBlbmRUb0ZpbGVOYW1lcyh3
ZWJraXRfc3VwcG9ydDo6R2V0QWJzb2x1dGVXZWJTdHJpbmdGcm9tVVRGOFBhdGgoZmlsZXNbaV0p
KTsKKyAgICAgICAgZHJhZ0NsaXBib2FyZC0+YWRkRmlsZVRvRHJhZygKKyAgICAgICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpHZXRBYnNvbHV0ZVdlYlN0cmluZ0Zyb21VVEY4UGF0aChmaWxlc1tpXSkp
OworICAgIGlzSW5EcmFnID0gdHJ1ZTsKICAgICBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkID0g
V2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIC8vIFByb3ZpZGUgYSBkcmFnIHNv
dXJjZS4KLSAgICB3ZWJ2aWV3KCktPmRyYWdUYXJnZXREcmFnRW50ZXIoY3VycmVudERyYWdEYXRh
LCAwLCBsYXN0TW91c2VQb3MsIGxhc3RNb3VzZVBvcywgY3VycmVudERyYWdFZmZlY3RzQWxsb3dl
ZCk7CisgICAgd2VidmlldygpLT5kcmFnVGFyZ2V0RHJhZ0VudGVyKDAsIGxhc3RNb3VzZVBvcywg
bGFzdE1vdXNlUG9zLCBjdXJyZW50RHJhZ0VmZmVjdHNBbGxvd2VkKTsKIAogICAgIC8vIGRyYWdN
b2RlIHNhdmVzIGV2ZW50cyBhbmQgdGhlbiByZXBsYXlzIHRoZW0gbGF0ZXIuIFdlIGRvbid0IG5l
ZWQvd2FudCB0aGF0LgogICAgIGRyYWdNb2RlLnNldChmYWxzZSk7CmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5oIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuaAppbmRleCBhYzQ3NWEzYjQx
ODIxMGMyZTNjYzQ3ZDBkNzRkZmI4NzFmZGQ1YmUxLi4xODYzNjBmMWYxMWNkNzkxMjZiNjZhZDdi
NWIwYTRiMWY2Y2QyNDkyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9FdmVudFNlbmRlci5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0V2ZW50U2VuZGVyLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIGNsYXNzIFRlc3RTaGVsbDsK
IAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJEcmFnRGF0YTsKIGNsYXNzIFdlYlZpZXc7
CiB9CiAKQEAgLTYwLDcgKzU5LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXQoKTsKIAogICAg
IC8vIFNpbXVsYXRlIGRyYWcmZHJvcCBzeXN0ZW0gY2FsbC4KLSAgICB2b2lkIGRvRHJhZ0Ryb3Ao
Y29uc3QgV2ViS2l0OjpXZWJEcmFnRGF0YSYsIFdlYktpdDo6V2ViRHJhZ09wZXJhdGlvbnNNYXNr
KTsKKyAgICB2b2lkIGRvRHJhZ0Ryb3AoV2ViS2l0OjpXZWJEcmFnT3BlcmF0aW9uc01hc2spOwog
CiAgICAgLy8gSlMgY2FsbGJhY2sgbWV0aG9kcy4KICAgICB2b2lkIG1vdXNlRG93bihjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5kZXggZmFlM2Y1NjIyMDM0MjI1
MjUxN2U1ZmNlZmM2NWY5YTE3M2MyOGY5ZS4uOTg0Yjk2ODc3MDFlZjA3ZGQ0NGI5OGI5OTg5NTc0
OGMzMjZmYjBmNyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtNDMsNiArNDMsOCBAQAogI2luY2x1ZGUgInB1YmxpYy9X
ZWJGcmFtZS5oIgogI2luY2x1ZGUgInB1YmxpYy9XZWJHZW9sb2NhdGlvblNlcnZpY2VNb2NrLmgi
CiAjaW5jbHVkZSAicHVibGljL1dlYkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAicHVibGljL1dl
YktpdC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJLaXRDbGllbnQuaCIKICNpbmNsdWRlICJwdWJs
aWMvV2ViTm9kZS5oIgogI2luY2x1ZGUgInB1YmxpYy9XZWJSYW5nZS5oIgogI2luY2x1ZGUgInB1
YmxpYy9XZWJSZWN0LmgiCkBAIC01NSw2ICs1Nyw3IEBACiAjaW5jbHVkZSAicHVibGljL1dlYldp
bmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAj
aW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvdG9vbHMvdGVzdF9zaGVsbC9tb2NrX3dlYmNsaXBib2FyZF9pbXBsLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCkBAIC0xMjEs
OSArMTI0LDExIEBAIHN0YXRpYyBzdHJpbmcgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQoY29uc3Qgc3RyaW5nJiB1cmwpCiAKIC8vIEFkZHMgYSBmaWxlIGNhbGxlZCAiRFJURmFrZUZp
bGUiIHRvIHxkYXRhX29iamVjdHwgKENGX0hEUk9QKS4gIFVzZSB0byBmYWtlCiAvLyBkcmFnZ2lu
ZyBhIGZpbGUuCi1zdGF0aWMgdm9pZCBhZGREUlRGYWtlRmlsZVRvRGF0YU9iamVjdChXZWJEcmFn
RGF0YSogZHJhZ0RhdGEpCitzdGF0aWMgdm9pZCBhZGREUlRGYWtlRmlsZVRvRGF0YU9iamVjdCgp
CiB7Ci0gICAgZHJhZ0RhdGEtPmFwcGVuZFRvRmlsZU5hbWVzKFdlYlN0cmluZzo6ZnJvbVVURjgo
IkRSVEZha2VGaWxlIikpOworICAgIE1vY2tXZWJDbGlwYm9hcmRJbXBsKiBkcmFnQ2xpcGJvYXJk
ID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8TW9ja1dlYkNsaXBib2FyZEltcGwqPihXZWJLaXQ6Ondl
YktpdENsaWVudCgpLT5jbGlwYm9hcmQoKSk7CisgICAgZHJhZ0NsaXBib2FyZC0+YWRkRmlsZVRv
RHJhZyhXZWJTdHJpbmc6OmZyb21VVEY4KCJEUlRGYWtlRmlsZSIpKTsKIH0KIAogLy8gR2V0IGEg
ZGVidWdnaW5nIHN0cmluZyBmcm9tIGEgV2ViTmF2aWdhdGlvblR5cGUuCkBAIC00NTUsMTcgKzQ2
MCwyMyBAQCB2b2lkIFdlYlZpZXdIb3N0OjpzZXRTdGF0dXNUZXh0KGNvbnN0IFdlYlN0cmluZyYg
dGV4dCkKICAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVz
VGV4dDolc1xuIiwgdGV4dC51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBXZWJWaWV3SG9zdDo6
c3RhcnREcmFnZ2luZyhjb25zdCBXZWJEcmFnRGF0YSYgZGF0YSwgV2ViRHJhZ09wZXJhdGlvbnNN
YXNrIG1hc2ssIGNvbnN0IFdlYkltYWdlJiwgY29uc3QgV2ViUG9pbnQmKQordm9pZCBXZWJWaWV3
SG9zdDo6c3RhcnREcmFnZ2luZyhjb25zdCBXZWJEcmFnRGF0YSYgZHJhZ0RhdGEsIFdlYkRyYWdP
cGVyYXRpb25zTWFzayBtYXNrLCBjb25zdCBXZWJJbWFnZSYsIGNvbnN0IFdlYlBvaW50JikKIHsK
LSAgICBXZWJEcmFnRGF0YSBtdXRhYmxlRHJhZ0RhdGEgPSBkYXRhOworICAgIE1vY2tXZWJDbGlw
Ym9hcmRJbXBsKiBkcmFnQ2xpcGJvYXJkID0KKyAgICAgICAgc3RhdGljX2Nhc3Q8TW9ja1dlYkNs
aXBib2FyZEltcGwqPihXZWJLaXQ6OndlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKSk7CisgICAg
ZHJhZ0NsaXBib2FyZC0+cmVzZXREYXRhKCk7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gdHlw
ZXM7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gZGF0YTsKKyAgICBkcmFnRGF0YS5kYXRhTWFw
KHR5cGVzLCBkYXRhKTsKKyAgICBkcmFnQ2xpcGJvYXJkLT5zZXREcmFnRGF0YSh0eXBlcywgZGF0
YSk7CiAgICAgaWYgKGxheW91dFRlc3RDb250cm9sbGVyKCktPnNob3VsZEFkZEZpbGVUb1Bhc3Rl
Ym9hcmQoKSkgewogICAgICAgICAvLyBBZGQgYSBmaWxlIGNhbGxlZCBEUlRGYWtlRmlsZSB0byB0
aGUgZHJhZyZkcm9wIGNsaXBib2FyZC4KLSAgICAgICAgYWRkRFJURmFrZUZpbGVUb0RhdGFPYmpl
Y3QoJm11dGFibGVEcmFnRGF0YSk7CisgICAgICAgIGFkZERSVEZha2VGaWxlVG9EYXRhT2JqZWN0
KCk7CiAgICAgfQogCiAgICAgLy8gV2hlbiBydW5uaW5nIGEgdGVzdCwgd2UgbmVlZCB0byBmYWtl
IGEgZHJhZyBkcm9wIG9wZXJhdGlvbiBvdGhlcndpc2UKICAgICAvLyBXaW5kb3dzIHdhaXRzIGZv
ciByZWFsIG1vdXNlIGV2ZW50cyB0byBrbm93IHdoZW4gdGhlIGRyYWcgaXMgb3Zlci4KLSAgICBt
X3NoZWxsLT5ldmVudFNlbmRlcigpLT5kb0RyYWdEcm9wKG11dGFibGVEcmFnRGF0YSwgbWFzayk7
CisgICAgbV9zaGVsbC0+ZXZlbnRTZW5kZXIoKS0+ZG9EcmFnRHJvcChtYXNrKTsKIH0KIAogdm9p
ZCBXZWJWaWV3SG9zdDo6bmF2aWdhdGVCYWNrRm9yd2FyZFNvb24oaW50IG9mZnNldCkK
</data>
<flag name="review"
          id="54869"
          type_id="1"
          status="-"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>