<?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>181068</bug_id>
          
          <creation_ts>2017-12-20 16:58:19 -0800</creation_ts>
          <short_desc>[Attachment Support] Attachment replacement logic should not depend on subresource URL attribute replacement</short_desc>
          <delta_ts>2017-12-20 19:50:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1383900</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-20 16:58:19 -0800</bug_when>
    <thetext>Currently, we always replace subresource URLs with blob URLs when reading web content. We want to revert this policy; however, logic to replace DOM elements in the rich fragment with attachments currently depends on us always replacing subresources with blobs. This means we need to decouple logic for replacing attachments from logic that replaces resource URLs in element attributes with blob URLs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383908</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-20 17:10:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/36168313&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383919</commentid>
    <comment_count>2</comment_count>
      <attachid>329972</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-20 17:26:47 -0800</bug_when>
    <thetext>Created attachment 329972
First pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383927</commentid>
    <comment_count>3</comment_count>
      <attachid>329975</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-20 17:32:47 -0800</bug_when>
    <thetext>Created attachment 329975
Minor adjustments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1383995</commentid>
    <comment_count>4</comment_count>
      <attachid>329975</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-20 19:32:23 -0800</bug_when>
    <thetext>Comment on attachment 329975
Minor adjustments.

r=me. Thanks for the refactoring!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384003</commentid>
    <comment_count>5</comment_count>
      <attachid>329975</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-20 19:50:20 -0800</bug_when>
    <thetext>Comment on attachment 329975
Minor adjustments.

Clearing flags on attachment: 329975

Committed r226213: &lt;https://trac.webkit.org/changeset/226213&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1384004</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-20 19:50:21 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329972</attachid>
            <date>2017-12-20 17:26:47 -0800</date>
            <delta_ts>2017-12-20 17:32:46 -0800</delta_ts>
            <desc>First pass</desc>
            <filename>bug-181068-20171220172646.patch</filename>
            <type>text/plain</type>
            <size>23954</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q2NmM3OWViZjc3Y2Fm
NDZkY2FlMzQxNzc0OTJlZmM1ZGYyMWQ3Yy4uMzUxMzc0ZDhjZjU3YzlhZmM2MTY2MjdmOTUwMDEz
ZjUyNzQ2NWU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDE3LTEyLTIwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEF0dGFjaG1lbnQgcmVwbGFjZW1lbnQgbG9naWMgc2hvdWxkIG5vdCBkZXBlbmQg
b24gc3VicmVzb3VyY2UgVVJMIGF0dHJpYnV0ZSByZXBsYWNlbWVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxMDY4CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3JzIGF0dGFjaG1lbnQgcmVw
bGFjZW1lbnQgbG9naWMsIHNvIHRoYXQgaXQgZG9lc24ndCByZXF1aXJlIHVzIHRvIGZpcnN0IHJl
cGxhY2UgZWxlbWVudCBhdHRyaWJ1dGVzIHRoYXQKKyAgICAgICAgY29udGFpbiBzdWJyZXNvdXJj
ZSBVUkxzIHdpdGggYmxvYiBVUkxzIGJlZm9yZSBwZXJmb3JtaW5nIGF0dGFjaG1lbnQgZWxlbWVu
dCByZXBsYWNlbWVudC4gU2VlIGJlbG93IGNvbW1lbnRzIGZvcgorICAgICAgICBtb3JlIGRldGFp
bC4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0cyBpbiBXS0F0dGFjaG1l
bnRUZXN0cy4KKworICAgICAgICAqIGVkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6QmxvYlJlcGxhY2VtZW50SW5mbzo6aXNFbXB0eSBjb25zdCk6IERlbGV0ZWQu
CisKKyAgICAgICAgUmVtb3ZlIEJsb2JSZXBsYWNlbWVudEluZm8uIEluc3RlYWQsIGF1Z21lbnQg
YHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c2Agc28gdGhhdCBpdCB0YWtlcyBpbiB0
aGUgbGlzdCBvZgorICAgICAgICBzdWJyZXNvdXJjZXMgZGlyZWN0bHkgYW5kIGdlbmVyYXRlcyBi
bG9icyBmb3IgZWFjaCBzdWJyZXNvdXJjZS4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25X
aXRoQXR0cmlidXRlZFN0cmluZyk6CisgICAgICAgICogZWRpdGluZy9jb2NvYS9XZWJDb250ZW50
UmVhZGVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRSZXBsYWNlUmljaENvbnRl
bnRXaXRoQXR0YWNobWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGb3JJ
bWFnZUF0dGFjaG1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVwbGFjZVJpY2hDb250ZW50V2l0
aEF0dGFjaG1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50QW5kQWRkUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUpOgor
CisgICAgICAgIEluIHRoZXNlIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBjdXJyZW50bHkgY29udmVy
dCBzdWJyZXNvdXJjZSBVUkxzIHRvIGJsb2IgVVJMcywgaWYgYXR0YWNobWVudCBlbGVtZW50cyBh
cmUgbm90CisgICAgICAgIGRlZmluZWQgb3V0LCBhbmQgdGhlIHJ1bnRpbWUgZmVhdHVyZSBmb3Ig
YXR0YWNobWVudCBlbGVtZW50cyBpcyBlbmFibGVkLCB0aGVuIHVzZSBhbiBhbHRlcm5hdGUgY29k
ZXBhdGggdG8KKyAgICAgICAgYWRqdXN0IHRoZSBtYXJrdXAgKHZpYSByZXBsYWNlUmljaENvbnRl
bnRXaXRoQXR0YWNobWVudHMpLgorCisgICAgICAgIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIGRl
ZmF1bHQgc3VicmVzb3VyY2UgVVJMIGNvbnZlcnNpb24gbG9naWMsIHdoaWNoIChhdCB0aGUgbW9t
ZW50KSBzdGlsbCBjb252ZXJ0cworICAgICAgICBzdWJyZXNvdXJjZXMgdG8gYmxvYnMsIGJ1dCB3
aWxsIHNvb24gYmUgY2hhbmdlZCB0byBlbWl0IGRhdGEgVVJMcyBpbnN0ZWFkLgorCisgICAgICAg
IChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkV2ViQXJjaGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkV2ViQXJjaGl2ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGRCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJDb250ZW50TWFya3VwUmVhZGVyOjpyZWFkUlRGRCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRN
YXJrdXBSZWFkZXI6OnJlYWRSVEYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRl
cjo6cmVhZEltYWdlKToKKworICAgICAgICBSZW1vdmUgdGhlIGNyZWF0ZUZyYWdtZW50RnJvbUF0
dHJpYnV0ZWRTdHJpbmcgaGVscGVyIGFuZCByZXZlcnQgdG8ganVzdCBjYWxsaW5nIGNyZWF0ZUZy
YWdtZW50QW5kQWRkUmVzb3VyY2VzLgorCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVu
dEZyb21BdHRyaWJ1dGVkU3RyaW5nKTogRGVsZXRlZC4KKwogMjAxNy0xMi0xOSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtGZXRjaF0gRXh0cmFjdGluZyBhIGJv
ZHkgb2YgdHlwZSBCbG9iIHNob3VsZCBub3Qgc2V0IENvbnRlbnQtVHlwZSB0byB0aGUgZW1wdHkg
c3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCmluZGV4IGYz
NjU4ZWE4Y2ZiNDFiMDBiY2NhYjA0NDkzNWFkNzdkOTVlN2ZjYWQuLmNjMTcwMzVhOTEwMGE5NjU2
YzI2MTkxYTA4NGQ3NmQ4Y2Y0NjRlZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvV2ViQ29udGVudFJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29u
dGVudFJlYWRlci5oCkBAIC0xMDYsMTQgKzEwNiw3IEBAIHN0cnVjdCBGcmFnbWVudEFuZFJlc291
cmNlcyB7CiAgICAgVmVjdG9yPFJlZjxBcmNoaXZlUmVzb3VyY2U+PiByZXNvdXJjZXM7CiB9Owog
Ci1zdHJ1Y3QgQmxvYlJlcGxhY2VtZW50SW5mbyB7Ci0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxCbG9iPj4gYmxvYlVSTFRvQmxvYk1hcDsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgQXRvbWljU3RyaW5nPiBibG9iVVJMVG9SZXBsYWNlZFVSTE1hcDsKLSAgICBib29sIGlzRW1w
dHkoKSBjb25zdCB7IHJldHVybiBibG9iVVJMVG9CbG9iTWFwLmlzRW1wdHkoKTsgfQotfTsKLQot
dm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeShEb2N1bWVu
dEZyYWdtZW50JiwgQmxvYlJlcGxhY2VtZW50SW5mbyYmKTsKLVJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYsIE5TQXR0cmlidXRlZFN0
cmluZyosIEJsb2JSZXBsYWNlbWVudEluZm8mKTsKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYsIE5TQXR0cmlidXRlZFN0cmluZyAq
KTsKICNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2Nv
YS5tbQppbmRleCA2Mjg3MDY2OTE0ZWM3NGU5NGY0NjJkY2I3NDhjNTdlZjQ1M2Y1MzMxLi4wYWM5
YTE2YWQ5MmUyZjRkM2RjM2VhMzgwZGExMTA1ODNhMjRjYmFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTIyMiw5ICsyMjIsNyBAQCB2b2lkIEVk
aXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7Ci0gICAgICAg
IEJsb2JSZXBsYWNlbWVudEluZm8gcmVwbGFjZW1lbnRJbmZvOwotICAgICAgICBpZiAoYXV0byBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUsIGF0dHJpYnV0
ZWRTdHJpbmcsIHJlcGxhY2VtZW50SW5mbykpIHsKLSAgICAgICAgICAgIHJlcGxhY2VSaWNoQ29u
dGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZShyZXBsYWNl
bWVudEluZm8pKTsKKyAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFu
ZEFkZFJlc291cmNlcyhtX2ZyYW1lLCBhdHRyaWJ1dGVkU3RyaW5nKSkgewogICAgICAgICAgICAg
aWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgc2VsZWN0ZWRSYW5nZSgpLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgICAgICAgICAgcGFzdGVBc0Zy
YWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGZhbHNlLCBmYWxzZSwgbWFpbEJsb2Nr
cXVvdGVIYW5kbGluZyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggNmZiNjhhYzk1NzhmMjkz
M2I5NjdiZTdiNmQ0ZGRmNWUxNWJiNjhjYi4uZWU0OWNkNjA4M2M2YjcyZTgyMDNkYzFkMjQ4OTdh
N2JmYWYyOWZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJD
b250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTc3LDgzICs3Nyw2IEBAIFNPRlRfTElOSyhXZWJL
aXRMZWdhY3ksIF9XZWJDcmVhdGVGcmFnbWVudCwgdm9pZCwgKFdlYkNvcmU6OkRvY3VtZW50JiBk
b2N1bWVudCwKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKLQotc3RydWN0IEF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8gewotICAgIEF0dGFj
aG1lbnREaXNwbGF5TW9kZSBkaXNwbGF5TW9kZTsKLSAgICBSZWY8RmlsZT4gZmlsZTsKLSAgICBS
ZWY8RWxlbWVudD4gZWxlbWVudFRvUmVwbGFjZTsKLX07Ci0KLXZvaWQgcmVwbGFjZVJpY2hDb250
ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQs
IEJsb2JSZXBsYWNlbWVudEluZm8mJiByZXBsYWNlbWVudEluZm8pCi17Ci0gICAgaWYgKCFSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5h
YmxlZCgpIHx8IHJlcGxhY2VtZW50SW5mby5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IGVsZW1lbnRzVG9SZW1vdmU7Ci0gICAgVmVjdG9yPEF0
dGFjaG1lbnRSZXBsYWNlbWVudEluZm8+IGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm87Ci0gICAg
Zm9yIChhdXRvJiBpbWFnZSA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxJbWFnZUVsZW1lbnQ+KGZy
YWdtZW50KSkgewotICAgICAgICBhdXRvIHVybCA9IGltYWdlLmF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oSFRNTE5hbWVzOjpzcmNBdHRyKTsKLSAgICAgICAgaWYgKHVybC5pc0VtcHR5
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGJsb2IgPSByZXBsYWNl
bWVudEluZm8uYmxvYlVSTFRvQmxvYk1hcC5nZXQodXJsKTsKLSAgICAgICAgaWYgKCFibG9iKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byB0aXRsZSA9IFVSTFBhcnNlciB7
IHJlcGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5nZXQodXJsKSB9LnJlc3Vs
dCgpLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICB0aXRsZSA9IEF0b21pY1N0cmluZygibWVkaWEiKTsKLQotICAgICAgICBhdHRh
Y2htZW50UmVwbGFjZW1lbnRJbmZvLmFwcGVuZCh7IEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5Q
bGFjZSwgRmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRsZSksIGltYWdlIH0pOwotICAgIH0KLQotICAg
IGZvciAoYXV0byYgb2JqZWN0IDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTE9iamVjdEVsZW1lbnQ+
KGZyYWdtZW50KSkgewotICAgICAgICBhdXRvIHVybCA9IG9iamVjdC5hdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6ZGF0YUF0dHIpOwotICAgICAgICBpZiAodXJsLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBibG9iID0g
cmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuZ2V0KHVybCk7Ci0gICAgICAgIGlmICgh
YmxvYikgewotICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byB0aXRsZSA9IFVS
TFBhcnNlciB7IHJlcGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5nZXQodXJs
KSB9LnJlc3VsdCgpLmxhc3RQYXRoQ29tcG9uZW50KCk7Ci0gICAgICAgIGlmICh0aXRsZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICB0aXRsZSA9IEF0b21pY1N0cmluZygiZmlsZSIpOwotCi0gICAg
ICAgIGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8uYXBwZW5kKHsgQXR0YWNobWVudERpc3BsYXlN
b2RlOjpBc0ljb24sIEZpbGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBvYmplY3QgfSk7Ci0gICAg
fQotCi0gICAgZm9yIChhdXRvJiBpbmZvIDogYXR0YWNobWVudFJlcGxhY2VtZW50SW5mbykgewot
ICAgICAgICBhdXRvIGZpbGUgPSBXVEZNb3ZlKGluZm8uZmlsZSk7Ci0gICAgICAgIGF1dG8gZWxl
bWVudFRvUmVwbGFjZSA9IFdURk1vdmUoaW5mby5lbGVtZW50VG9SZXBsYWNlKTsKLSAgICAgICAg
YXV0byBwYXJlbnQgPSBtYWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBhcmVudE5vZGUoKSk7
Ci0gICAgICAgIGlmICghcGFyZW50KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
YXV0byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVz
OjphdHRhY2htZW50VGFnLCBmcmFnbWVudC5kb2N1bWVudCgpKTsKLSAgICAgICAgYXR0YWNobWVu
dC0+c2V0VW5pcXVlSWRlbnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOwotICAg
ICAgICBhdHRhY2htZW50LT5zZXRGaWxlKFdURk1vdmUoZmlsZSksIEhUTUxBdHRhY2htZW50RWxl
bWVudDo6VXBkYXRlRGlzcGxheUF0dHJpYnV0ZXM6Olllcyk7Ci0gICAgICAgIGF0dGFjaG1lbnQt
PnVwZGF0ZURpc3BsYXlNb2RlKGluZm8uZGlzcGxheU1vZGUpOwotICAgICAgICBwYXJlbnQtPnJl
cGxhY2VDaGlsZChhdHRhY2htZW50LCBlbGVtZW50VG9SZXBsYWNlKTsKLSAgICB9Ci0KLSAgICBm
b3IgKGF1dG8mIGVsZW1lbnRUb1JlbW92ZSA6IGVsZW1lbnRzVG9SZW1vdmUpCi0gICAgICAgIGVs
ZW1lbnRUb1JlbW92ZS0+cmVtb3ZlKCk7Ci19Ci0KLSNlbHNlCi0KLXZvaWQgcmVwbGFjZVJpY2hD
b250ZW50V2l0aEF0dGFjaG1lbnRzSWZOZWNlc3NhcnkoRG9jdW1lbnRGcmFnbWVudCYsIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8QmxvYj4+JiYpCi17Ci19Ci0KLSNlbmRpZgotCiAjaWYg
KFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTEw
MDAwKSB8fCAoUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTMwMCkKIAogc3RhdGljIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlc0ZvckF0dHJpYnV0
ZWRTdHJpbmdDb252ZXJzaW9uKCkKQEAgLTI1Miw3ICsxNzUsMTEzIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2RpZERpc2FibGVJbWFnZSB7IGZhbHNlIH07CiB9OwogCi1SZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBOU0F0
dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgQmxvYlJlcGxhY2VtZW50SW5mbyYgcmVwbGFjZW1lbnRJ
bmZvKQorc3RhdGljIGJvb2wgc2hvdWxkUmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRz
KCkKK3sKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIHJldHVybiBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmF0dGFjaG1lbnRFbGVtZW50RW5hYmxl
ZCgpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworc3RhdGljIFJlZjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvckltYWdlQXR0YWNobWVudChEb2N1bWVu
dCYgZG9jdW1lbnQsIFJlZjxCbG9iPiYmIGJsb2IpCit7CisjaWYgRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKKyAgICBhdXRvIGF0dGFjaG1lbnQgPSBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmNy
ZWF0ZShIVE1MTmFtZXM6OmF0dGFjaG1lbnRUYWcsIGRvY3VtZW50KTsKKyAgICBhdHRhY2htZW50
LT5zZXRVbmlxdWVJZGVudGlmaWVyKGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7CisgICAg
YXR0YWNobWVudC0+c2V0RmlsZShGaWxlOjpjcmVhdGUoYmxvYiwgQXRvbWljU3RyaW5nKCJpbWFn
ZSIpKSwgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpVcGRhdGVEaXNwbGF5QXR0cmlidXRlczo6WWVz
KTsKKyAgICBhdHRhY2htZW50LT51cGRhdGVEaXNwbGF5TW9kZShBdHRhY2htZW50RGlzcGxheU1v
ZGU6OkluUGxhY2UpOworCisgICAgYXV0byBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoKTsKKyAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYXR0YWNobWVudCk7CisK
KyAgICByZXR1cm4gZnJhZ21lbnQ7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShibG9iKTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50cyhEb2N1bWVudEZy
YWdtZW50JiBmcmFnbWVudCwgY29uc3QgVmVjdG9yPFJlZjxBcmNoaXZlUmVzb3VyY2U+PiYgc3Vi
cmVzb3VyY2VzKQoreworI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCisgICAgc3RydWN0
IEF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8geworICAgICAgICBBdHRhY2htZW50RGlzcGxheU1v
ZGUgZGlzcGxheU1vZGU7CisgICAgICAgIFJlZjxGaWxlPiBmaWxlOworICAgICAgICBSZWY8RWxl
bWVudD4gZWxlbWVudFRvUmVwbGFjZTsKKyAgICB9OworCisgICAgQVNTRVJUKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCkp
OworICAgIGlmIChzdWJyZXNvdXJjZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogSGFuZGxlIHJlc291cmNlcyBpbiBzdWJmcmFtZSBhcmNoaXZlcy4KKyAgICBI
YXNoTWFwPEF0b21pY1N0cmluZywgUmVmPEJsb2I+PiB1cmxUb0Jsb2JNYXA7CisgICAgZm9yIChj
b25zdCBSZWY8QXJjaGl2ZVJlc291cmNlPiYgc3VicmVzb3VyY2UgOiBzdWJyZXNvdXJjZXMpCisg
ICAgICAgIHVybFRvQmxvYk1hcC5zZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBCbG9i
OjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwgc3VicmVzb3VyY2UtPm1pbWVUeXBlKCkpKTsK
KworICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IGVsZW1lbnRzVG9SZW1vdmU7CisgICAgVmVjdG9y
PEF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8+IGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm87Cisg
ICAgZm9yIChhdXRvJiBpbWFnZSA6IGRlc2NlbmRhbnRzT2ZUeXBlPEhUTUxJbWFnZUVsZW1lbnQ+
KGZyYWdtZW50KSkgeworICAgICAgICBhdXRvIHJlc291cmNlVVJMU3RyaW5nID0gaW1hZ2UuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnNyY0F0dHIpOworICAgICAg
ICBpZiAocmVzb3VyY2VVUkxTdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgYXV0byBibG9iID0gdXJsVG9CbG9iTWFwLmdldChyZXNvdXJjZVVSTFN0cmlu
Zyk7CisgICAgICAgIGlmICghYmxvYikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGF1dG8gdGl0bGUgPSBVUkxQYXJzZXIgeyByZXNvdXJjZVVSTFN0cmluZyB9LnJlc3VsdCgpLmxh
c3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICB0aXRsZSA9IEF0b21pY1N0cmluZygibWVkaWEiKTsKKworICAgICAgICBhdHRhY2htZW50
UmVwbGFjZW1lbnRJbmZvLmFwcGVuZCh7IEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5QbGFjZSwg
RmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRsZSksIGltYWdlIH0pOworICAgIH0KKworICAgIGZvciAo
YXV0byYgb2JqZWN0IDogZGVzY2VuZGFudHNPZlR5cGU8SFRNTE9iamVjdEVsZW1lbnQ+KGZyYWdt
ZW50KSkgeworICAgICAgICBhdXRvIHJlc291cmNlVVJMU3RyaW5nID0gb2JqZWN0LmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpkYXRhQXR0cik7CisgICAgICAgIGlm
IChyZXNvdXJjZVVSTFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGVsZW1lbnRzVG9S
ZW1vdmUuYXBwZW5kKG9iamVjdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gYmxvYiA9IHVybFRvQmxvYk1hcC5nZXQocmVzb3VyY2VVUkxTdHJpbmcp
OworICAgICAgICBpZiAoIWJsb2IpIHsKKyAgICAgICAgICAgIGVsZW1lbnRzVG9SZW1vdmUuYXBw
ZW5kKG9iamVjdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gdGl0bGUgPSBVUkxQYXJzZXIgeyByZXNvdXJjZVVSTFN0cmluZyB9LnJlc3VsdCgpLmxh
c3RQYXRoQ29tcG9uZW50KCk7CisgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICB0aXRsZSA9IEF0b21pY1N0cmluZygiZmlsZSIpOworCisgICAgICAgIGF0dGFjaG1lbnRS
ZXBsYWNlbWVudEluZm8uYXBwZW5kKHsgQXR0YWNobWVudERpc3BsYXlNb2RlOjpBc0ljb24sIEZp
bGU6OmNyZWF0ZSgqYmxvYiwgdGl0bGUpLCBvYmplY3QgfSk7CisgICAgfQorCisgICAgZm9yIChh
dXRvJiBpbmZvIDogYXR0YWNobWVudFJlcGxhY2VtZW50SW5mbykgeworICAgICAgICBhdXRvIGZp
bGUgPSBXVEZNb3ZlKGluZm8uZmlsZSk7CisgICAgICAgIGF1dG8gZWxlbWVudFRvUmVwbGFjZSA9
IFdURk1vdmUoaW5mby5lbGVtZW50VG9SZXBsYWNlKTsKKyAgICAgICAgYXV0byBwYXJlbnQgPSBt
YWtlUmVmUHRyKGVsZW1lbnRUb1JlcGxhY2UtPnBhcmVudE5vZGUoKSk7CisgICAgICAgIGlmICgh
cGFyZW50KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byBhdHRhY2htZW50
ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFn
LCBmcmFnbWVudC5kb2N1bWVudCgpKTsKKyAgICAgICAgYXR0YWNobWVudC0+c2V0VW5pcXVlSWRl
bnRpZmllcihjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkpOworICAgICAgICBhdHRhY2htZW50
LT5zZXRGaWxlKFdURk1vdmUoZmlsZSksIEhUTUxBdHRhY2htZW50RWxlbWVudDo6VXBkYXRlRGlz
cGxheUF0dHJpYnV0ZXM6Olllcyk7CisgICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZURpc3BsYXlN
b2RlKGluZm8uZGlzcGxheU1vZGUpOworICAgICAgICBwYXJlbnQtPnJlcGxhY2VDaGlsZChhdHRh
Y2htZW50LCBlbGVtZW50VG9SZXBsYWNlKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGVsZW1l
bnRUb1JlbW92ZSA6IGVsZW1lbnRzVG9SZW1vdmUpCisgICAgICAgIGVsZW1lbnRUb1JlbW92ZS0+
cmVtb3ZlKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFnbWVudCk7CisgICAgVU5VU0VE
X1BBUkFNKHN1YnJlc291cmNlcyk7CisjZW5kaWYKK30KKworCitSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoRnJhbWUmIGZyYW1lLCBOU0F0dHJp
YnV0ZWRTdHJpbmcgKnN0cmluZykKIHsKICAgICBpZiAoIWZyYW1lLnBhZ2UoKSB8fCAhZnJhbWUu
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNzQsMTUgKzMwMywxOCBA
QCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMo
RnJhbWUmIGZyYW1lLCBOU0F0dHJpYnV0ZQogICAgICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVu
dEFuZFJlc291cmNlcy5mcmFnbWVudCk7CiAgICAgfQogCi0gICAgSGFzaE1hcDxBdG9taWNTdHJp
bmcsIEF0b21pY1N0cmluZz4gYmxvYlVSTE1hcDsKLSAgICBmb3IgKGNvbnN0IFJlZjxBcmNoaXZl
UmVzb3VyY2U+JiBzdWJyZXNvdXJjZSA6IGZyYWdtZW50QW5kUmVzb3VyY2VzLnJlc291cmNlcykg
ewotICAgICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwg
c3VicmVzb3VyY2UtPm1pbWVUeXBlKCkpOwotICAgICAgICBTdHJpbmcgYmxvYlVSTCA9IERPTVVS
TDo6Y3JlYXRlT2JqZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKLSAgICAgICAgYmxvYlVSTE1hcC5z
ZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBibG9iVVJMKTsKLSAgICAgICAgcmVwbGFj
ZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuc2V0KGJsb2JVUkwsIFdURk1vdmUoYmxvYikpOwot
ICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvUmVwbGFjZWRVUkxNYXAuc2V0KGJsb2JV
UkwsIHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7CisgICAgaWYgKHNob3VsZFJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50cygpKQorICAgICAgICByZXBsYWNlUmljaENvbnRlbnRX
aXRoQXR0YWNobWVudHMoKmZyYWdtZW50QW5kUmVzb3VyY2VzLmZyYWdtZW50LCBmcmFnbWVudEFu
ZFJlc291cmNlcy5yZXNvdXJjZXMpOworICAgIGVsc2UgeworICAgICAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZywgQXRvbWljU3RyaW5nPiBibG9iVVJMTWFwOworICAgICAgICBmb3IgKGNvbnN0IFJl
ZjxBcmNoaXZlUmVzb3VyY2U+JiBzdWJyZXNvdXJjZSA6IGZyYWdtZW50QW5kUmVzb3VyY2VzLnJl
c291cmNlcykgeworICAgICAgICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKHN1YnJlc291
cmNlLT5kYXRhKCksIHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKKyAgICAgICAgICAgIFN0cmlu
ZyBibG9iVVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwoZG9jdW1lbnQsIGJsb2IpOworICAg
ICAgICAgICAgYmxvYlVSTE1hcC5zZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBibG9i
VVJMKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoKmZyYWdt
ZW50QW5kUmVzb3VyY2VzLmZyYWdtZW50LCBXVEZNb3ZlKGJsb2JVUkxNYXApKTsKICAgICB9Ci0g
ICAgcmVwbGFjZVN1YnJlc291cmNlVVJMcygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQs
IFdURk1vdmUoYmxvYlVSTE1hcCkpOwogCiAgICAgcmV0dXJuIFdURk1vdmUoZnJhZ21lbnRBbmRS
ZXNvdXJjZXMuZnJhZ21lbnQpOwogfQpAQCAtMzEwLDUxICszNDIsNTEgQEAgc3RhdGljIHN0ZDo6
b3B0aW9uYWw8TWFya3VwQW5kQXJjaGl2ZT4gZXh0cmFjdE1hcmt1cEFuZEFyY2hpdmUoU2hhcmVk
QnVmZmVyJiBidWYKICAgICByZXR1cm4gTWFya3VwQW5kQXJjaGl2ZSB7IFN0cmluZzo6ZnJvbVVU
RjgobWFpblJlc291cmNlLT5kYXRhKCkuZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS5zaXpl
KCkpLCBtYWluUmVzb3VyY2UucmVsZWFzZU5vbk51bGwoKSwgYXJjaGl2ZS5yZWxlYXNlTm9uTnVs
bCgpIH07CiB9CiAKLXN0YXRpYyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1
bWVudCYgZGVzdGluYXRpb25Eb2N1bWVudCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJj
aGl2ZSwgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlN
RVR5cGVBc0hUTUwsIEJsb2JSZXBsYWNlbWVudEluZm8mIHJlcGxhY2VtZW50SW5mbykKK3N0YXRp
YyBTdHJpbmcgc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShEb2N1bWVudCYgZGVzdGluYXRpb25E
b2N1bWVudCwgTWFya3VwQW5kQXJjaGl2ZSYgbWFya3VwQW5kQXJjaGl2ZSwgY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyk+JiBjYW5TaG93TUlNRVR5cGVBc0hUTUwpCiB7CiAg
ICAgYXV0byBwYWdlID0gY3JlYXRlUGFnZUZvclNhbml0aXppbmdXZWJDb250ZW50KCk7CiAgICAg
RG9jdW1lbnQqIHN0YWdpbmdEb2N1bWVudCA9IHBhZ2UtPm1haW5GcmFtZSgpLmRvY3VtZW50KCk7
CiAgICAgQVNTRVJUKHN0YWdpbmdEb2N1bWVudCk7CiAgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cCgqc3RhZ2luZ0RvY3VtZW50LCBtYXJrdXBBbmRBcmNoaXZlLm1h
cmt1cCwgbWFya3VwQW5kQXJjaGl2ZS5tYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1Njcmlw
dGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogCi0gICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEF0b21p
Y1N0cmluZz4gYmxvYlVSTE1hcDsKLSAgICBmb3IgKGNvbnN0IFJlZjxBcmNoaXZlUmVzb3VyY2U+
JiBzdWJyZXNvdXJjZSA6IG1hcmt1cEFuZEFyY2hpdmUuYXJjaGl2ZS0+c3VicmVzb3VyY2VzKCkp
IHsKLSAgICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKHN1YnJlc291cmNlLT5kYXRhKCks
IHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKLSAgICAgICAgU3RyaW5nIGJsb2JVUkwgPSBET01V
Ukw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlvbkRvY3VtZW50LCBibG9iKTsKLSAgICAgICAg
YmxvYlVSTE1hcC5zZXQoc3VicmVzb3VyY2UtPnVybCgpLnN0cmluZygpLCBibG9iVVJMKTsKLSAg
ICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuc2V0KGJsb2JVUkwsIFdURk1v
dmUoYmxvYikpOwotICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvUmVwbGFjZWRVUkxN
YXAuc2V0KGJsb2JVUkwsIHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgfQotCi0g
ICAgYXV0byBjb250ZW50T3JpZ2luID0gU2VjdXJpdHlPcmlnaW46OmNyZWF0ZShtYXJrdXBBbmRB
cmNoaXZlLm1haW5SZXNvdXJjZS0+dXJsKCkpOwotICAgIGZvciAoY29uc3QgUmVmPEFyY2hpdmU+
JiBzdWJmcmFtZUFyY2hpdmUgOiBtYXJrdXBBbmRBcmNoaXZlLmFyY2hpdmUtPnN1YmZyYW1lQXJj
aGl2ZXMoKSkgewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJmcmFtZU1haW5S
ZXNvdXJjZSA9IHN1YmZyYW1lQXJjaGl2ZS0+bWFpblJlc291cmNlKCk7Ci0gICAgICAgIGlmICgh
c3ViZnJhbWVNYWluUmVzb3VyY2UpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBpZiAoc2hv
dWxkUmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzKCkpCisgICAgICAgIHJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50cyhmcmFnbWVudCwgbWFya3VwQW5kQXJjaGl2ZS5hcmNo
aXZlLT5zdWJyZXNvdXJjZXMoKSk7CisgICAgZWxzZSB7CisgICAgICAgIEhhc2hNYXA8QXRvbWlj
U3RyaW5nLCBBdG9taWNTdHJpbmc+IGJsb2JVUkxNYXA7CisgICAgICAgIGZvciAoY29uc3QgUmVm
PEFyY2hpdmVSZXNvdXJjZT4mIHN1YnJlc291cmNlIDogbWFya3VwQW5kQXJjaGl2ZS5hcmNoaXZl
LT5zdWJyZXNvdXJjZXMoKSkgeworICAgICAgICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRl
KHN1YnJlc291cmNlLT5kYXRhKCksIHN1YnJlc291cmNlLT5taW1lVHlwZSgpKTsKKyAgICAgICAg
ICAgIFN0cmluZyBibG9iVVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwoZGVzdGluYXRpb25E
b2N1bWVudCwgYmxvYik7CisgICAgICAgICAgICBibG9iVVJMTWFwLnNldChzdWJyZXNvdXJjZS0+
dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOworICAgICAgICB9CiAKLSAgICAgICAgYXV0byB0eXBl
ID0gc3ViZnJhbWVNYWluUmVzb3VyY2UtPm1pbWVUeXBlKCk7Ci0gICAgICAgIGlmICghY2FuU2hv
d01JTUVUeXBlQXNIVE1MKHR5cGUpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1
dG8gY29udGVudE9yaWdpbiA9IFNlY3VyaXR5T3JpZ2luOjpjcmVhdGUobWFya3VwQW5kQXJjaGl2
ZS5tYWluUmVzb3VyY2UtPnVybCgpKTsKKyAgICAgICAgZm9yIChjb25zdCBSZWY8QXJjaGl2ZT4m
IHN1YmZyYW1lQXJjaGl2ZSA6IG1hcmt1cEFuZEFyY2hpdmUuYXJjaGl2ZS0+c3ViZnJhbWVBcmNo
aXZlcygpKSB7CisgICAgICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiBzdWJmcmFtZU1h
aW5SZXNvdXJjZSA9IHN1YmZyYW1lQXJjaGl2ZS0+bWFpblJlc291cmNlKCk7CisgICAgICAgICAg
ICBpZiAoIXN1YmZyYW1lTWFpblJlc291cmNlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBhdXRvIHR5cGUgPSBzdWJmcmFtZU1haW5SZXNvdXJjZS0+bWltZVR5cGUo
KTsKKyAgICAgICAgICAgIGlmICghY2FuU2hvd01JTUVUeXBlQXNIVE1MKHR5cGUpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBhdXRvIHN1YmZyYW1lVVJMID0gc3Vi
ZnJhbWVNYWluUmVzb3VyY2UtPnVybCgpOworICAgICAgICAgICAgTWFya3VwQW5kQXJjaGl2ZSBz
dWJmcmFtZUNvbnRlbnQgPSB7IFN0cmluZzo6ZnJvbVVURjgoc3ViZnJhbWVNYWluUmVzb3VyY2Ut
PmRhdGEoKS5kYXRhKCksIHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRhKCkuc2l6ZSgpKSwKKyAg
ICAgICAgICAgICAgICBzdWJmcmFtZU1haW5SZXNvdXJjZS5yZWxlYXNlTm9uTnVsbCgpLCBzdWJm
cmFtZUFyY2hpdmUuY29weVJlZigpIH07CisgICAgICAgICAgICBhdXRvIHN1YmZyYW1lTWFya3Vw
ID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZShkZXN0aW5hdGlvbkRvY3VtZW50LCBzdWJmcmFt
ZUNvbnRlbnQsIGNhblNob3dNSU1FVHlwZUFzSFRNTCk7CisKKyAgICAgICAgICAgIENTdHJpbmcg
dXRmOCA9IHN1YmZyYW1lTWFya3VwLnV0ZjgoKTsKKyAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBibG9iQnVmZmVyOworICAgICAgICAgICAgYmxvYkJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkodXRm
OC5sZW5ndGgoKSk7CisgICAgICAgICAgICBibG9iQnVmZmVyLmFwcGVuZChyZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4LmRhdGEoKSksIHV0ZjgubGVuZ3RoKCkpOworICAgICAg
ICAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRlKFdURk1vdmUoYmxvYkJ1ZmZlciksIHR5cGUp
OworCisgICAgICAgICAgICBTdHJpbmcgc3ViZnJhbWVCbG9iVVJMID0gRE9NVVJMOjpjcmVhdGVP
YmplY3RVUkwoZGVzdGluYXRpb25Eb2N1bWVudCwgYmxvYik7CisgICAgICAgICAgICBibG9iVVJM
TWFwLnNldChzdWJmcmFtZVVSTC5zdHJpbmcoKSwgc3ViZnJhbWVCbG9iVVJMKTsKKyAgICAgICAg
fQogCi0gICAgICAgIGF1dG8gc3ViZnJhbWVVUkwgPSBzdWJmcmFtZU1haW5SZXNvdXJjZS0+dXJs
KCk7Ci0gICAgICAgIE1hcmt1cEFuZEFyY2hpdmUgc3ViZnJhbWVDb250ZW50ID0geyBTdHJpbmc6
OmZyb21VVEY4KHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRhKCkuZGF0YSgpLCBzdWJmcmFtZU1h
aW5SZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSksCi0gICAgICAgICAgICBzdWJmcmFtZU1haW5SZXNv
dXJjZS5yZWxlYXNlTm9uTnVsbCgpLCBzdWJmcmFtZUFyY2hpdmUuY29weVJlZigpIH07Ci0gICAg
ICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKGRlc3Rp
bmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2FuU2hvd01JTUVUeXBlQXNIVE1MLCBy
ZXBsYWNlbWVudEluZm8pOwotCi0gICAgICAgIENTdHJpbmcgdXRmOCA9IHN1YmZyYW1lTWFya3Vw
LnV0ZjgoKTsKLSAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JCdWZmZXI7Ci0gICAgICAgIGJs
b2JCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KHV0ZjgubGVuZ3RoKCkpOwotICAgICAgICBibG9iQnVm
ZmVyLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih1dGY4LmRhdGEoKSks
IHV0ZjgubGVuZ3RoKCkpOwotICAgICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoV1RGTW92
ZShibG9iQnVmZmVyKSwgdHlwZSk7Ci0KLSAgICAgICAgU3RyaW5nIHN1YmZyYW1lQmxvYlVSTCA9
IERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRlc3RpbmF0aW9uRG9jdW1lbnQsIGJsb2IpOwotICAg
ICAgICBibG9iVVJMTWFwLnNldChzdWJmcmFtZVVSTC5zdHJpbmcoKSwgc3ViZnJhbWVCbG9iVVJM
KTsKLSAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb0Jsb2JNYXAuc2V0KHN1YmZyYW1l
QmxvYlVSTCwgV1RGTW92ZShibG9iKSk7Ci0gICAgICAgIHJlcGxhY2VtZW50SW5mby5ibG9iVVJM
VG9SZXBsYWNlZFVSTE1hcC5zZXQoc3ViZnJhbWVCbG9iVVJMLCBzdWJmcmFtZVVSTC5zdHJpbmco
KSk7CisgICAgICAgIHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoZnJhZ21lbnQuZ2V0KCksIFdURk1v
dmUoYmxvYlVSTE1hcCkpOwogICAgIH0KIAotICAgIHJlcGxhY2VTdWJyZXNvdXJjZVVSTHMoZnJh
Z21lbnQuZ2V0KCksIFdURk1vdmUoYmxvYlVSTE1hcCkpOwotCiAgICAgYXV0byogYm9keUVsZW1l
bnQgPSBzdGFnaW5nRG9jdW1lbnQtPmJvZHkoKTsKICAgICBBU1NFUlQoYm9keUVsZW1lbnQpOwog
ICAgIGJvZHlFbGVtZW50LT5hcHBlbmRDaGlsZChmcmFnbWVudCk7CkBAIC0zODgsMTYgKzQyMCwx
NCBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKFNoYXJlZEJ1ZmZlciYg
YnVmZmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBCbG9iUmVwbGFjZW1l
bnRJbmZvIHJlcGxhY2VtZW50SW5mbzsKICAgICBTdHJpbmcgc2FuaXRpemVkTWFya3VwID0gc2Fu
aXRpemVNYXJrdXBXaXRoQXJjaGl2ZSgqZnJhbWUuZG9jdW1lbnQoKSwgKnJlc3VsdCwgWyZdIChj
b25zdCBTdHJpbmcmIHR5cGUpIHsKICAgICAgICAgcmV0dXJuIGZyYW1lLmxvYWRlcigpLmNsaWVu
dCgpLmNhblNob3dNSU1FVHlwZUFzSFRNTCh0eXBlKTsKLSAgICB9LCByZXBsYWNlbWVudEluZm8p
OworICAgIH0pOwogICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFt
ZS5kb2N1bWVudCgpLCBzYW5pdGl6ZWRNYXJrdXAsIGJsYW5rVVJMKCksIERpc2FsbG93U2NyaXB0
aW5nQW5kUGx1Z2luQ29udGVudCk7CiAKICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vz
c2FyeSgqZnJhZ21lbnQsIFdURk1vdmUocmVwbGFjZW1lbnRJbmZvKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTQxNywxMCArNDQ3LDkgQEAgYm9vbCBXZWJDb250ZW50TWFya3VwUmVhZGVy
OjpyZWFkV2ViQXJjaGl2ZShTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgQmxvYlJlcGxhY2VtZW50SW5mbyByZXBsYWNlbWVudEluZm87CiAg
ICAgbWFya3VwID0gc2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZSgqZnJhbWUuZG9jdW1lbnQoKSwg
KnJlc3VsdCwgWyZdIChjb25zdCBTdHJpbmcmIHR5cGUpIHsKICAgICAgICAgcmV0dXJuIGZyYW1l
LmxvYWRlcigpLmNsaWVudCgpLmNhblNob3dNSU1FVHlwZUFzSFRNTCh0eXBlKTsKLSAgICB9LCBy
ZXBsYWNlbWVudEluZm8pOworICAgIH0pOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC00Njgs
MjQgKzQ5NywxMiBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRIVE1MKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogICAgIHJldHVybiAhbWFya3VwLmlzRW1wdHkoKTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21BdHRyaWJ1dGVk
U3RyaW5nKEZyYW1lJiBmcmFtZSwgTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCi17Ci0gICAg
QmxvYlJlcGxhY2VtZW50SW5mbyByZXBsYWNlbWVudEluZm87Ci0gICAgYXV0byBmcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBzdHJpbmcsIHJlcGxhY2VtZW50
SW5mbyk7Ci0gICAgaWYgKCFmcmFnbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgqZnJhZ21lbnQs
IFdURk1vdmUocmVwbGFjZW1lbnRJbmZvKSk7Ci0gICAgcmV0dXJuIGZyYWdtZW50OwotfQotCiBi
b29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewog
ICAgIGlmIChmcmFtZS5zZXR0aW5ncygpLnByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkgfHwgIWZy
YW1lLmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gc3RyaW5n
ID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEZEOmJ1ZmZl
ci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0pOwotICAg
IGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKGZyYW1l
LCBzdHJpbmcuZ2V0KCkpOworICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEFuZEFk
ZFJlc291cmNlcyhmcmFtZSwgW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJU
RkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRy
XSBhdXRvcmVsZWFzZV0pOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBhZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTQ5Nyw4
ICs1MTQsOCBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEZEKFNoYXJlZEJ1
ZmZlciYgYnVmZmVyKQogewogICAgIGlmICghZnJhbWUuZG9jdW1lbnQoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGF1dG8gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhSVEZEOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVu
dEF0dHJpYnV0ZXM6bnVsbHB0cl0pOwotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21BdHRyaWJ1dGVkU3RyaW5nKGZyYW1lLCBzdHJpbmcuZ2V0KCkpOworCisgICAgYXV0byBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBbW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGRDpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0
KCkgZG9jdW1lbnRBdHRyaWJ1dGVzOm51bGxwdHJdIGF1dG9yZWxlYXNlXSk7CiAgICAgaWYgKCFm
cmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MTEsOCArNTI4LDcgQEAgYm9v
bCBXZWJDb250ZW50UmVhZGVyOjpyZWFkUlRGKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgIGlm
IChmcmFtZS5zZXR0aW5ncygpLnByZWZlck1JTUVUeXBlRm9ySW1hZ2VzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3Vt
ZW50QXR0cmlidXRlczpudWxscHRyXSk7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoZnJhbWUsIHN0cmluZy5nZXQoKSk7CisgICAgYXV0byBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBbW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoUlRGOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQo
KSBkb2N1bWVudEF0dHJpYnV0ZXM6bnVsbHB0cl0gYXV0b3JlbGVhc2VdKTsKICAgICBpZiAoIWZy
YWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYWRkRnJhZ21lbnQoZnJhZ21lbnQu
cmVsZWFzZU5vbk51bGwoKSk7CkBAIC01MjQsOCArNTQwLDggQEAgYm9vbCBXZWJDb250ZW50TWFy
a3VwUmVhZGVyOjpyZWFkUlRGKFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewogICAgIGlmICghZnJh
bWUuZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8gc3RyaW5nID0g
YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLmNy
ZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSk7Ci0gICAgYXV0
byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoZnJhbWUsIHN0
cmluZy5nZXQoKSk7CisKKyAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoZnJhbWUsIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6
YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSBh
dXRvcmVsZWFzZV0pOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBtYXJrdXAgPSBjcmVhdGVNYXJrdXAoKmZyYWdtZW50KTsKQEAgLTU0OCwxMyArNTY0LDE1
IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEltYWdlKFJlZjxTaGFyZWRCdWZmZXI+JiYg
YnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgYXV0byBibG9iID0gQmxvYjo6Y3JlYXRl
KGJ1ZmZlci5nZXQoKSwgdHlwZSk7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwogICAg
IGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLmRvY3VtZW50KCk7Ci0gICAgU3RyaW5nIGJsb2JVUkwg
PSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkb2N1bWVudCwgYmxvYik7Ci0gICAgYWRkRnJhZ21l
bnQoY3JlYXRlRnJhZ21lbnRGb3JJbWFnZUFuZFVSTChkb2N1bWVudCwgYmxvYlVSTCkpOworCisg
ICAgaWYgKHNob3VsZFJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50cygpKQorICAgICAg
ICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZvckltYWdlQXR0YWNobWVudChkb2N1bWVudCwg
V1RGTW92ZShibG9iKSkpOworICAgIGVsc2UKKyAgICAgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJh
Z21lbnRGb3JJbWFnZUFuZFVSTChkb2N1bWVudCwgRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwoZG9j
dW1lbnQsIGJsb2IpKSk7CiAKICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5lY2Vzc2FyeSgq
ZnJhZ21lbnQsIHt7eyBibG9iVVJMLCBXVEZNb3ZlKGJsb2IpIH19LCB7IH19KTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329975</attachid>
            <date>2017-12-20 17:32:47 -0800</date>
            <delta_ts>2017-12-20 19:50:20 -0800</delta_ts>
            <desc>Minor adjustments.</desc>
            <filename>bug-181068-20171220173247.patch</filename>
            <type>text/plain</type>
            <size>23536</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI2MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2Q2NmM3OWViZjc3Y2Fm
NDZkY2FlMzQxNzc0OTJlZmM1ZGYyMWQ3Yy4uNzFhZDllN2YzYjc0YjUyZWM4NTUyMjBjY2ViN2Q3
N2E0OTEzNzIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTEyLTIwICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIEF0dGFjaG1lbnQgcmVwbGFjZW1lbnQgbG9naWMgc2hvdWxkIG5vdCBkZXBlbmQg
b24gc3VicmVzb3VyY2UgVVJMIGF0dHJpYnV0ZSByZXBsYWNlbWVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxMDY4CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zNjE2ODMxMz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBSZWZhY3RvcnMgYXR0YWNobWVudCByZXBsYWNlbWVudCBsb2dpYywgc28gdGhh
dCBpdCBkb2Vzbid0IHJlcXVpcmUgdXMgdG8gZmlyc3QgcmVwbGFjZSBlbGVtZW50IGF0dHJpYnV0
ZXMgdGhhdAorICAgICAgICBjb250YWluIHN1YnJlc291cmNlIFVSTHMgd2l0aCBibG9iIFVSTHMg
YmVmb3JlIHBlcmZvcm1pbmcgYXR0YWNobWVudCBlbGVtZW50IHJlcGxhY2VtZW50LiBTZWUgYmVs
b3cgY29tbWVudHMgZm9yCisgICAgICAgIG1vcmUgZGV0YWlsLgorCisgICAgICAgIENvdmVyZWQg
YnkgZXhpc3RpbmcgQVBJIHRlc3RzIGluIFdLQXR0YWNobWVudFRlc3RzLgorCisgICAgICAgICog
ZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVwbGFj
ZW1lbnRJbmZvOjppc0VtcHR5IGNvbnN0KTogRGVsZXRlZC4KKworICAgICAgICBSZW1vdmUgQmxv
YlJlcGxhY2VtZW50SW5mby4gSW5zdGVhZCwgYXVnbWVudCBgcmVwbGFjZVJpY2hDb250ZW50V2l0
aEF0dGFjaG1lbnRzYCBzbyB0aGF0IGl0IHRha2VzIGluIHRoZSBsaXN0IG9mCisgICAgICAgIHN1
YnJlc291cmNlcyBkaXJlY3RseSBhbmQgZ2VuZXJhdGVzIGJsb2JzIGZvciBlYWNoIHN1YnJlc291
cmNlLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKToK
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OnNob3VsZFJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZvckltYWdlQXR0YWNobWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpyZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6c2FuaXRpemVNYXJrdXBXaXRoQXJjaGl2ZSk6CisKKyAgICAgICAgSW4gdGhlc2UgaGVs
cGVyIGZ1bmN0aW9ucyB0aGF0IGN1cnJlbnRseSBjb252ZXJ0IHN1YnJlc291cmNlIFVSTHMgdG8g
YmxvYiBVUkxzLCBpZiBhdHRhY2htZW50IGVsZW1lbnRzIGFyZSBub3QKKyAgICAgICAgZGVmaW5l
ZCBvdXQsIGFuZCB0aGUgcnVudGltZSBmZWF0dXJlIGZvciBhdHRhY2htZW50IGVsZW1lbnRzIGlz
IGVuYWJsZWQsIHRoZW4gdXNlIGFuIGFsdGVybmF0ZSBjb2RlcGF0aCB0bworICAgICAgICBhZGp1
c3QgdGhlIG1hcmt1cCAodmlhIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50cykuCisK
KyAgICAgICAgT3RoZXJ3aXNlLCBmYWxsIGJhY2sgdG8gZGVmYXVsdCBzdWJyZXNvdXJjZSBVUkwg
Y29udmVyc2lvbiBsb2dpYywgd2hpY2ggKGF0IHRoZSBtb21lbnQpIHN0aWxsIGNvbnZlcnRzCisg
ICAgICAgIHN1YnJlc291cmNlcyB0byBibG9icywgYnV0IHdpbGwgc29vbiBiZSBjaGFuZ2VkIHRv
IGVtaXQgZGF0YSBVUkxzIGluc3RlYWQuCisKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRS
ZWFkZXI6OnJlYWRXZWJBcmNoaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJr
dXBSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRS
ZWFkZXI6OnJlYWRSVEZEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRNYXJrdXBSZWFk
ZXI6OnJlYWRSVEZEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRS
VEYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVudE1hcmt1cFJlYWRlcjo6cmVhZFJURik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSW1hZ2UpOgorCisgICAg
ICAgIFJlbW92ZSB0aGUgY3JlYXRlRnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyBoZWxwZXIg
YW5kIHJldmVydCB0byBqdXN0IGNhbGxpbmcgY3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMu
CisKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcp
OiBEZWxldGVkLgorCiAyMDE3LTEyLTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgW0ZldGNoXSBFeHRyYWN0aW5nIGEgYm9keSBvZiB0eXBlIEJsb2Igc2hvdWxk
IG5vdCBzZXQgQ29udGVudC1UeXBlIHRvIHRoZSBlbXB0eSBzdHJpbmcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKaW5kZXggZjM2NThlYThjZmI0MWIwMGJjY2FiMDQ0
OTM1YWQ3N2Q5NWU3ZmNhZC4uY2MxNzAzNWE5MTAwYTk2NTZjMjYxOTFhMDg0ZDc2ZDhjZjQ2NGVm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKQEAgLTEwNiwx
NCArMTA2LDcgQEAgc3RydWN0IEZyYWdtZW50QW5kUmVzb3VyY2VzIHsKICAgICBWZWN0b3I8UmVm
PEFyY2hpdmVSZXNvdXJjZT4+IHJlc291cmNlczsKIH07CiAKLXN0cnVjdCBCbG9iUmVwbGFjZW1l
bnRJbmZvIHsKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEJsb2I+PiBibG9iVVJM
VG9CbG9iTWFwOwotICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IGJsb2JV
UkxUb1JlcGxhY2VkVVJMTWFwOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJs
b2JVUkxUb0Jsb2JNYXAuaXNFbXB0eSgpOyB9Ci19OwotCi12b2lkIHJlcGxhY2VSaWNoQ29udGVu
dFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KERvY3VtZW50RnJhZ21lbnQmLCBCbG9iUmVwbGFj
ZW1lbnRJbmZvJiYpOwotUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5k
QWRkUmVzb3VyY2VzKEZyYW1lJiwgTlNBdHRyaWJ1dGVkU3RyaW5nKiwgQmxvYlJlcGxhY2VtZW50
SW5mbyYpOworUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVz
b3VyY2VzKEZyYW1lJiwgTlNBdHRyaWJ1dGVkU3RyaW5nICopOwogI2VuZGlmCiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IDYyODcwNjY5MTRl
Yzc0ZTk0ZjQ2MmRjYjc0OGM1N2VmNDUzZjUzMzEuLjBhYzlhMTZhZDkyZTJmNGQzZGMzZWEzODBk
YTExMDU4M2EyNGNiYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQpAQCAtMjIyLDkgKzIyMiw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9u
V2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKLSAgICAgICAgQmxvYlJlcGxhY2VtZW50SW5mbyBy
ZXBsYWNlbWVudEluZm87Ci0gICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRBbmRBZGRSZXNvdXJjZXMobV9mcmFtZSwgYXR0cmlidXRlZFN0cmluZywgcmVwbGFjZW1lbnRJ
bmZvKSkgewotICAgICAgICAgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzSWZO
ZWNlc3NhcnkoKmZyYWdtZW50LCBXVEZNb3ZlKHJlcGxhY2VtZW50SW5mbykpOworICAgICAgICBp
ZiAoYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKG1fZnJhbWUs
IGF0dHJpYnV0ZWRTdHJpbmcpKSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21l
bnQoKmZyYWdtZW50LCBzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
UGFzdGVkKSkKICAgICAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFz
ZU5vbk51bGwoKSwgZmFsc2UsIGZhbHNlLCBtYWlsQmxvY2txdW90ZUhhbmRsaW5nKTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50
UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRS
ZWFkZXJDb2NvYS5tbQppbmRleCA2ZmI2OGFjOTU3OGYyOTMzYjk2N2JlN2I2ZDRkZGY1ZTE1YmI2
OGNiLi5hMGE0YTBiZjY5NDI3ODdhNzE0M2QyYzEwOGVjZGNiZDRiYjI5OWM1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5t
bQpAQCAtNzcsODMgKzc3LDYgQEAgU09GVF9MSU5LKFdlYktpdExlZ2FjeSwgX1dlYkNyZWF0ZUZy
YWdtZW50LCB2b2lkLCAoV2ViQ29yZTo6RG9jdW1lbnQmIGRvY3VtZW50LAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLSNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotCi1zdHJ1Y3QgQXR0
YWNobWVudFJlcGxhY2VtZW50SW5mbyB7Ci0gICAgQXR0YWNobWVudERpc3BsYXlNb2RlIGRpc3Bs
YXlNb2RlOwotICAgIFJlZjxGaWxlPiBmaWxlOwotICAgIFJlZjxFbGVtZW50PiBlbGVtZW50VG9S
ZXBsYWNlOwotfTsKLQotdm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJZk5l
Y2Vzc2FyeShEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgQmxvYlJlcGxhY2VtZW50SW5mbyYm
IHJlcGxhY2VtZW50SW5mbykKLXsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCkgfHwgcmVwbGFjZW1lbnRJ
bmZvLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFJlZjxFbGVtZW50
Pj4gZWxlbWVudHNUb1JlbW92ZTsKLSAgICBWZWN0b3I8QXR0YWNobWVudFJlcGxhY2VtZW50SW5m
bz4gYXR0YWNobWVudFJlcGxhY2VtZW50SW5mbzsKLSAgICBmb3IgKGF1dG8mIGltYWdlIDogZGVz
Y2VuZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZnJhZ21lbnQpKSB7Ci0gICAgICAgIGF1
dG8gdXJsID0gaW1hZ2UuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6
OnNyY0F0dHIpOwotICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGF1dG8gYmxvYiA9IHJlcGxhY2VtZW50SW5mby5ibG9iVVJMVG9CbG9i
TWFwLmdldCh1cmwpOwotICAgICAgICBpZiAoIWJsb2IpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBhdXRvIHRpdGxlID0gVVJMUGFyc2VyIHsgcmVwbGFjZW1lbnRJbmZvLmJsb2JV
UkxUb1JlcGxhY2VkVVJMTWFwLmdldCh1cmwpIH0ucmVzdWx0KCkubGFzdFBhdGhDb21wb25lbnQo
KTsKLSAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRpdGxlID0gQXRv
bWljU3RyaW5nKCJtZWRpYSIpOwotCi0gICAgICAgIGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8u
YXBwZW5kKHsgQXR0YWNobWVudERpc3BsYXlNb2RlOjpJblBsYWNlLCBGaWxlOjpjcmVhdGUoKmJs
b2IsIHRpdGxlKSwgaW1hZ2UgfSk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBvYmplY3QgOiBk
ZXNjZW5kYW50c09mVHlwZTxIVE1MT2JqZWN0RWxlbWVudD4oZnJhZ21lbnQpKSB7Ci0gICAgICAg
IGF1dG8gdXJsID0gb2JqZWN0LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5h
bWVzOjpkYXRhQXR0cik7Ci0gICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBlbGVtZW50c1RvUmVtb3ZlLmFwcGVuZChvYmplY3QpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGJsb2IgPSByZXBsYWNlbWVudEluZm8uYmxvYlVS
TFRvQmxvYk1hcC5nZXQodXJsKTsKLSAgICAgICAgaWYgKCFibG9iKSB7Ci0gICAgICAgICAgICBl
bGVtZW50c1RvUmVtb3ZlLmFwcGVuZChvYmplY3QpOwotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBhdXRvIHRpdGxlID0gVVJMUGFyc2VyIHsgcmVwbGFjZW1lbnRJ
bmZvLmJsb2JVUkxUb1JlcGxhY2VkVVJMTWFwLmdldCh1cmwpIH0ucmVzdWx0KCkubGFzdFBhdGhD
b21wb25lbnQoKTsKLSAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHRp
dGxlID0gQXRvbWljU3RyaW5nKCJmaWxlIik7Ci0KLSAgICAgICAgYXR0YWNobWVudFJlcGxhY2Vt
ZW50SW5mby5hcHBlbmQoeyBBdHRhY2htZW50RGlzcGxheU1vZGU6OkFzSWNvbiwgRmlsZTo6Y3Jl
YXRlKCpibG9iLCB0aXRsZSksIG9iamVjdCB9KTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGlu
Zm8gOiBhdHRhY2htZW50UmVwbGFjZW1lbnRJbmZvKSB7Ci0gICAgICAgIGF1dG8gZmlsZSA9IFdU
Rk1vdmUoaW5mby5maWxlKTsKLSAgICAgICAgYXV0byBlbGVtZW50VG9SZXBsYWNlID0gV1RGTW92
ZShpbmZvLmVsZW1lbnRUb1JlcGxhY2UpOwotICAgICAgICBhdXRvIHBhcmVudCA9IG1ha2VSZWZQ
dHIoZWxlbWVudFRvUmVwbGFjZS0+cGFyZW50Tm9kZSgpKTsKLSAgICAgICAgaWYgKCFwYXJlbnQp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSBIVE1M
QXR0YWNobWVudEVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OmF0dGFjaG1lbnRUYWcsIGZyYWdt
ZW50LmRvY3VtZW50KCkpOwotICAgICAgICBhdHRhY2htZW50LT5zZXRVbmlxdWVJZGVudGlmaWVy
KGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKSk7Ci0gICAgICAgIGF0dGFjaG1lbnQtPnNldEZp
bGUoV1RGTW92ZShmaWxlKSwgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpVcGRhdGVEaXNwbGF5QXR0
cmlidXRlczo6WWVzKTsKLSAgICAgICAgYXR0YWNobWVudC0+dXBkYXRlRGlzcGxheU1vZGUoaW5m
by5kaXNwbGF5TW9kZSk7Ci0gICAgICAgIHBhcmVudC0+cmVwbGFjZUNoaWxkKGF0dGFjaG1lbnQs
IGVsZW1lbnRUb1JlcGxhY2UpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgZWxlbWVudFRvUmVt
b3ZlIDogZWxlbWVudHNUb1JlbW92ZSkKLSAgICAgICAgZWxlbWVudFRvUmVtb3ZlLT5yZW1vdmUo
KTsKLX0KLQotI2Vsc2UKLQotdm9pZCByZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHNJ
Zk5lY2Vzc2FyeShEb2N1bWVudEZyYWdtZW50JiwgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0
cjxCbG9iPj4mJikKLXsKLX0KLQotI2VuZGlmCi0KICNpZiAoUExBVEZPUk0oSU9TKSAmJiBfX0lQ
SE9ORV9PU19WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMTAwMDApIHx8IChQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMzAwKQogCiBzdGF0aWMg
TlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQpA
QCAtMjUyLDcgKzE3NSwxMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlkRGlzYWJsZUltYWdl
IHsgZmFsc2UgfTsKIH07CiAKLVJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5n
LCBCbG9iUmVwbGFjZW1lbnRJbmZvJiByZXBsYWNlbWVudEluZm8pCitzdGF0aWMgYm9vbCBzaG91
bGRSZXBsYWNlUmljaENvbnRlbnRXaXRoQXR0YWNobWVudHMoKQoreworI2lmIEVOQUJMRShBVFRB
Q0hNRU5UX0VMRU1FTlQpCisgICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuYXR0YWNobWVudEVsZW1lbnRFbmFibGVkKCk7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitzdGF0aWMgUmVmPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0
ZUZyYWdtZW50Rm9ySW1hZ2VBdHRhY2htZW50KERvY3VtZW50JiBkb2N1bWVudCwgUmVmPEJsb2I+
JiYgYmxvYikKK3sKKyNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQorICAgIGF1dG8gYXR0
YWNobWVudCA9IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKEhUTUxOYW1lczo6YXR0YWNo
bWVudFRhZywgZG9jdW1lbnQpOworICAgIGF0dGFjaG1lbnQtPnNldFVuaXF1ZUlkZW50aWZpZXIo
Y3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKKyAgICBhdHRhY2htZW50LT5zZXRGaWxlKEZp
bGU6OmNyZWF0ZShibG9iLCBBdG9taWNTdHJpbmcoImltYWdlIikpLCBIVE1MQXR0YWNobWVudEVs
ZW1lbnQ6OlVwZGF0ZURpc3BsYXlBdHRyaWJ1dGVzOjpZZXMpOworICAgIGF0dGFjaG1lbnQtPnVw
ZGF0ZURpc3BsYXlNb2RlKEF0dGFjaG1lbnREaXNwbGF5TW9kZTo6SW5QbGFjZSk7CisKKyAgICBh
dXRvIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworICAgIGZy
YWdtZW50LT5hcHBlbmRDaGlsZChhdHRhY2htZW50KTsKKworICAgIHJldHVybiBmcmFnbWVudDsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJsb2IpOworICAgIHJldHVybiBkb2N1bWVudC5jcmVh
dGVEb2N1bWVudEZyYWdtZW50KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcmVwbGFjZVJp
Y2hDb250ZW50V2l0aEF0dGFjaG1lbnRzKERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25z
dCBWZWN0b3I8UmVmPEFyY2hpdmVSZXNvdXJjZT4+JiBzdWJyZXNvdXJjZXMpCit7CisjaWYgRU5B
QkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKKyAgICBzdHJ1Y3QgQXR0YWNobWVudFJlcGxhY2VtZW50
SW5mbyB7CisgICAgICAgIEF0dGFjaG1lbnREaXNwbGF5TW9kZSBkaXNwbGF5TW9kZTsKKyAgICAg
ICAgUmVmPEZpbGU+IGZpbGU7CisgICAgICAgIFJlZjxFbGVtZW50PiBlbGVtZW50VG9SZXBsYWNl
OworICAgIH07CisKKyAgICBBU1NFUlQoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKSk7CisgICAgaWYgKHN1YnJlc291cmNl
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgcmVz
b3VyY2VzIGluIHN1YmZyYW1lIGFyY2hpdmVzLgorICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWY8QmxvYj4+IHVybFRvQmxvYk1hcDsKKyAgICBmb3IgKGNvbnN0IFJlZjxBcmNoaXZlUmVzb3Vy
Y2U+JiBzdWJyZXNvdXJjZSA6IHN1YnJlc291cmNlcykKKyAgICAgICAgdXJsVG9CbG9iTWFwLnNl
dChzdWJyZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCksIEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJjZS0+
ZGF0YSgpLCBzdWJyZXNvdXJjZS0+bWltZVR5cGUoKSkpOworCisgICAgVmVjdG9yPFJlZjxFbGVt
ZW50Pj4gZWxlbWVudHNUb1JlbW92ZTsKKyAgICBWZWN0b3I8QXR0YWNobWVudFJlcGxhY2VtZW50
SW5mbz4gYXR0YWNobWVudFJlcGxhY2VtZW50SW5mbzsKKyAgICBmb3IgKGF1dG8mIGltYWdlIDog
ZGVzY2VuZGFudHNPZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oZnJhZ21lbnQpKSB7CisgICAgICAg
IGF1dG8gcmVzb3VyY2VVUkxTdHJpbmcgPSBpbWFnZS5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgICAgIGlmIChyZXNvdXJjZVVSTFN0cmlu
Zy5pc0VtcHR5KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdXRvIGJsb2Ig
PSB1cmxUb0Jsb2JNYXAuZ2V0KHJlc291cmNlVVJMU3RyaW5nKTsKKyAgICAgICAgaWYgKCFibG9i
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXV0byB0aXRsZSA9IFVSTFBhcnNl
ciB7IHJlc291cmNlVVJMU3RyaW5nIH0ucmVzdWx0KCkubGFzdFBhdGhDb21wb25lbnQoKTsKKyAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRpdGxlID0gQXRvbWljU3Ry
aW5nKCJtZWRpYSIpOworCisgICAgICAgIGF0dGFjaG1lbnRSZXBsYWNlbWVudEluZm8uYXBwZW5k
KHsgQXR0YWNobWVudERpc3BsYXlNb2RlOjpJblBsYWNlLCBGaWxlOjpjcmVhdGUoKmJsb2IsIHRp
dGxlKSwgaW1hZ2UgfSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBvYmplY3QgOiBkZXNjZW5k
YW50c09mVHlwZTxIVE1MT2JqZWN0RWxlbWVudD4oZnJhZ21lbnQpKSB7CisgICAgICAgIGF1dG8g
cmVzb3VyY2VVUkxTdHJpbmcgPSBvYmplY3QuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihIVE1MTmFtZXM6OmRhdGFBdHRyKTsKKyAgICAgICAgaWYgKHJlc291cmNlVVJMU3RyaW5nLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBibG9iID0g
dXJsVG9CbG9iTWFwLmdldChyZXNvdXJjZVVSTFN0cmluZyk7CisgICAgICAgIGlmICghYmxvYikg
eworICAgICAgICAgICAgZWxlbWVudHNUb1JlbW92ZS5hcHBlbmQob2JqZWN0KTsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB0aXRsZSA9IFVSTFBhcnNl
ciB7IHJlc291cmNlVVJMU3RyaW5nIH0ucmVzdWx0KCkubGFzdFBhdGhDb21wb25lbnQoKTsKKyAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRpdGxlID0gQXRvbWljU3Ry
aW5nKCJmaWxlIik7CisKKyAgICAgICAgYXR0YWNobWVudFJlcGxhY2VtZW50SW5mby5hcHBlbmQo
eyBBdHRhY2htZW50RGlzcGxheU1vZGU6OkFzSWNvbiwgRmlsZTo6Y3JlYXRlKCpibG9iLCB0aXRs
ZSksIG9iamVjdCB9KTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGluZm8gOiBhdHRhY2htZW50
UmVwbGFjZW1lbnRJbmZvKSB7CisgICAgICAgIGF1dG8gZmlsZSA9IFdURk1vdmUoaW5mby5maWxl
KTsKKyAgICAgICAgYXV0byBlbGVtZW50VG9SZXBsYWNlID0gV1RGTW92ZShpbmZvLmVsZW1lbnRU
b1JlcGxhY2UpOworICAgICAgICBhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIoZWxlbWVudFRvUmVw
bGFjZS0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgaWYgKCFwYXJlbnQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSBIVE1MQXR0YWNobWVudEVsZW1l
bnQ6OmNyZWF0ZShIVE1MTmFtZXM6OmF0dGFjaG1lbnRUYWcsIGZyYWdtZW50LmRvY3VtZW50KCkp
OworICAgICAgICBhdHRhY2htZW50LT5zZXRVbmlxdWVJZGVudGlmaWVyKGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSk7CisgICAgICAgIGF0dGFjaG1lbnQtPnNldEZpbGUoV1RGTW92ZShmaWxl
KSwgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpVcGRhdGVEaXNwbGF5QXR0cmlidXRlczo6WWVzKTsK
KyAgICAgICAgYXR0YWNobWVudC0+dXBkYXRlRGlzcGxheU1vZGUoaW5mby5kaXNwbGF5TW9kZSk7
CisgICAgICAgIHBhcmVudC0+cmVwbGFjZUNoaWxkKGF0dGFjaG1lbnQsIGVsZW1lbnRUb1JlcGxh
Y2UpOworICAgIH0KKworICAgIGZvciAoYXV0byYgZWxlbWVudFRvUmVtb3ZlIDogZWxlbWVudHNU
b1JlbW92ZSkKKyAgICAgICAgZWxlbWVudFRvUmVtb3ZlLT5yZW1vdmUoKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKGZyYWdtZW50KTsKKyAgICBVTlVTRURfUEFSQU0oc3VicmVzb3VyY2VzKTsK
KyNlbmRpZgorfQorCisKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEFu
ZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQog
ewogICAgIGlmICghZnJhbWUucGFnZSgpIHx8ICFmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTI3NCwxNSArMzAzLDE4IEBAIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhGcmFtZSYgZnJhbWUsIE5TQXR0cmli
dXRlCiAgICAgICAgIHJldHVybiBXVEZNb3ZlKGZyYWdtZW50QW5kUmVzb3VyY2VzLmZyYWdtZW50
KTsKICAgICB9CiAKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgQXRvbWljU3RyaW5nPiBibG9i
VVJMTWFwOwotICAgIGZvciAoY29uc3QgUmVmPEFyY2hpdmVSZXNvdXJjZT4mIHN1YnJlc291cmNl
IDogZnJhZ21lbnRBbmRSZXNvdXJjZXMucmVzb3VyY2VzKSB7Ci0gICAgICAgIGF1dG8gYmxvYiA9
IEJsb2I6OmNyZWF0ZShzdWJyZXNvdXJjZS0+ZGF0YSgpLCBzdWJyZXNvdXJjZS0+bWltZVR5cGUo
KSk7Ci0gICAgICAgIFN0cmluZyBibG9iVVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RVUkwoZG9j
dW1lbnQsIGJsb2IpOwotICAgICAgICBibG9iVVJMTWFwLnNldChzdWJyZXNvdXJjZS0+dXJsKCku
c3RyaW5nKCksIGJsb2JVUkwpOwotICAgICAgICByZXBsYWNlbWVudEluZm8uYmxvYlVSTFRvQmxv
Yk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7Ci0gICAgICAgIHJlcGxhY2VtZW50SW5m
by5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5zZXQoYmxvYlVSTCwgc3VicmVzb3VyY2UtPnVybCgp
LnN0cmluZygpKTsKKyAgICBpZiAoc2hvdWxkUmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1l
bnRzKCkpCisgICAgICAgIHJlcGxhY2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50cygqZnJhZ21l
bnRBbmRSZXNvdXJjZXMuZnJhZ21lbnQsIGZyYWdtZW50QW5kUmVzb3VyY2VzLnJlc291cmNlcyk7
CisgICAgZWxzZSB7CisgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+
IGJsb2JVUkxNYXA7CisgICAgICAgIGZvciAoY29uc3QgUmVmPEFyY2hpdmVSZXNvdXJjZT4mIHN1
YnJlc291cmNlIDogZnJhZ21lbnRBbmRSZXNvdXJjZXMucmVzb3VyY2VzKSB7CisgICAgICAgICAg
ICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwgc3VicmVzb3Vy
Y2UtPm1pbWVUeXBlKCkpOworICAgICAgICAgICAgU3RyaW5nIGJsb2JVUkwgPSBET01VUkw6OmNy
ZWF0ZU9iamVjdFVSTChkb2N1bWVudCwgYmxvYik7CisgICAgICAgICAgICBibG9iVVJMTWFwLnNl
dChzdWJyZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOworICAgICAgICB9CisKKyAg
ICAgICAgcmVwbGFjZVN1YnJlc291cmNlVVJMcygqZnJhZ21lbnRBbmRSZXNvdXJjZXMuZnJhZ21l
bnQsIFdURk1vdmUoYmxvYlVSTE1hcCkpOwogICAgIH0KLSAgICByZXBsYWNlU3VicmVzb3VyY2VV
UkxzKCpmcmFnbWVudEFuZFJlc291cmNlcy5mcmFnbWVudCwgV1RGTW92ZShibG9iVVJMTWFwKSk7
CiAKICAgICByZXR1cm4gV1RGTW92ZShmcmFnbWVudEFuZFJlc291cmNlcy5mcmFnbWVudCk7CiB9
CkBAIC0zMTAsNTEgKzM0Miw1MSBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxNYXJrdXBBbmRBcmNo
aXZlPiBleHRyYWN0TWFya3VwQW5kQXJjaGl2ZShTaGFyZWRCdWZmZXImIGJ1ZgogICAgIHJldHVy
biBNYXJrdXBBbmRBcmNoaXZlIHsgU3RyaW5nOjpmcm9tVVRGOChtYWluUmVzb3VyY2UtPmRhdGEo
KS5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0YSgpLnNpemUoKSksIG1haW5SZXNvdXJjZS5yZWxl
YXNlTm9uTnVsbCgpLCBhcmNoaXZlLnJlbGVhc2VOb25OdWxsKCkgfTsKIH0KIAotc3RhdGljIFN0
cmluZyBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZlKERvY3VtZW50JiBkZXN0aW5hdGlvbkRvY3Vt
ZW50LCBNYXJrdXBBbmRBcmNoaXZlJiBtYXJrdXBBbmRBcmNoaXZlLCBjb25zdCBzdGQ6OmZ1bmN0
aW9uPGJvb2woY29uc3QgU3RyaW5nKT4mIGNhblNob3dNSU1FVHlwZUFzSFRNTCwgQmxvYlJlcGxh
Y2VtZW50SW5mbyYgcmVwbGFjZW1lbnRJbmZvKQorc3RhdGljIFN0cmluZyBzYW5pdGl6ZU1hcmt1
cFdpdGhBcmNoaXZlKERvY3VtZW50JiBkZXN0aW5hdGlvbkRvY3VtZW50LCBNYXJrdXBBbmRBcmNo
aXZlJiBtYXJrdXBBbmRBcmNoaXZlLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woY29uc3QgU3Ry
aW5nKT4mIGNhblNob3dNSU1FVHlwZUFzSFRNTCkKIHsKICAgICBhdXRvIHBhZ2UgPSBjcmVhdGVQ
YWdlRm9yU2FuaXRpemluZ1dlYkNvbnRlbnQoKTsKICAgICBEb2N1bWVudCogc3RhZ2luZ0RvY3Vt
ZW50ID0gcGFnZS0+bWFpbkZyYW1lKCkuZG9jdW1lbnQoKTsKICAgICBBU1NFUlQoc3RhZ2luZ0Rv
Y3VtZW50KTsKICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpz
dGFnaW5nRG9jdW1lbnQsIG1hcmt1cEFuZEFyY2hpdmUubWFya3VwLCBtYXJrdXBBbmRBcmNoaXZl
Lm1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7
CiAKLSAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgQXRvbWljU3RyaW5nPiBibG9iVVJMTWFwOwot
ICAgIGZvciAoY29uc3QgUmVmPEFyY2hpdmVSZXNvdXJjZT4mIHN1YnJlc291cmNlIDogbWFya3Vw
QW5kQXJjaGl2ZS5hcmNoaXZlLT5zdWJyZXNvdXJjZXMoKSkgewotICAgICAgICBhdXRvIGJsb2Ig
PSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwgc3VicmVzb3VyY2UtPm1pbWVUeXBl
KCkpOwotICAgICAgICBTdHJpbmcgYmxvYlVSTCA9IERPTVVSTDo6Y3JlYXRlT2JqZWN0VVJMKGRl
c3RpbmF0aW9uRG9jdW1lbnQsIGJsb2IpOwotICAgICAgICBibG9iVVJMTWFwLnNldChzdWJyZXNv
dXJjZS0+dXJsKCkuc3RyaW5nKCksIGJsb2JVUkwpOwotICAgICAgICByZXBsYWNlbWVudEluZm8u
YmxvYlVSTFRvQmxvYk1hcC5zZXQoYmxvYlVSTCwgV1RGTW92ZShibG9iKSk7Ci0gICAgICAgIHJl
cGxhY2VtZW50SW5mby5ibG9iVVJMVG9SZXBsYWNlZFVSTE1hcC5zZXQoYmxvYlVSTCwgc3VicmVz
b3VyY2UtPnVybCgpLnN0cmluZygpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNvbnRlbnRPcmlnaW4g
PSBTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKG1hcmt1cEFuZEFyY2hpdmUubWFpblJlc291cmNlLT51
cmwoKSk7Ci0gICAgZm9yIChjb25zdCBSZWY8QXJjaGl2ZT4mIHN1YmZyYW1lQXJjaGl2ZSA6IG1h
cmt1cEFuZEFyY2hpdmUuYXJjaGl2ZS0+c3ViZnJhbWVBcmNoaXZlcygpKSB7Ci0gICAgICAgIFJl
ZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHN1YmZyYW1lTWFpblJlc291cmNlID0gc3ViZnJhbWVBcmNo
aXZlLT5tYWluUmVzb3VyY2UoKTsKLSAgICAgICAgaWYgKCFzdWJmcmFtZU1haW5SZXNvdXJjZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmIChzaG91bGRSZXBsYWNlUmljaENvbnRlbnRX
aXRoQXR0YWNobWVudHMoKSkKKyAgICAgICAgcmVwbGFjZVJpY2hDb250ZW50V2l0aEF0dGFjaG1l
bnRzKGZyYWdtZW50LCBtYXJrdXBBbmRBcmNoaXZlLmFyY2hpdmUtPnN1YnJlc291cmNlcygpKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4g
YmxvYlVSTE1hcDsKKyAgICAgICAgZm9yIChjb25zdCBSZWY8QXJjaGl2ZVJlc291cmNlPiYgc3Vi
cmVzb3VyY2UgOiBtYXJrdXBBbmRBcmNoaXZlLmFyY2hpdmUtPnN1YnJlc291cmNlcygpKSB7Cisg
ICAgICAgICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoc3VicmVzb3VyY2UtPmRhdGEoKSwg
c3VicmVzb3VyY2UtPm1pbWVUeXBlKCkpOworICAgICAgICAgICAgU3RyaW5nIGJsb2JVUkwgPSBE
T01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlvbkRvY3VtZW50LCBibG9iKTsKKyAgICAg
ICAgICAgIGJsb2JVUkxNYXAuc2V0KHN1YnJlc291cmNlLT51cmwoKS5zdHJpbmcoKSwgYmxvYlVS
TCk7CisgICAgICAgIH0KIAotICAgICAgICBhdXRvIHR5cGUgPSBzdWJmcmFtZU1haW5SZXNvdXJj
ZS0+bWltZVR5cGUoKTsKLSAgICAgICAgaWYgKCFjYW5TaG93TUlNRVR5cGVBc0hUTUwodHlwZSkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byBjb250ZW50T3JpZ2luID0gU2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZShtYXJrdXBBbmRBcmNoaXZlLm1haW5SZXNvdXJjZS0+dXJsKCkp
OworICAgICAgICBmb3IgKGNvbnN0IFJlZjxBcmNoaXZlPiYgc3ViZnJhbWVBcmNoaXZlIDogbWFy
a3VwQW5kQXJjaGl2ZS5hcmNoaXZlLT5zdWJmcmFtZUFyY2hpdmVzKCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+IHN1YmZyYW1lTWFpblJlc291cmNlID0gc3ViZnJhbWVB
cmNoaXZlLT5tYWluUmVzb3VyY2UoKTsKKyAgICAgICAgICAgIGlmICghc3ViZnJhbWVNYWluUmVz
b3VyY2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGF1dG8gdHlw
ZSA9IHN1YmZyYW1lTWFpblJlc291cmNlLT5taW1lVHlwZSgpOworICAgICAgICAgICAgaWYgKCFj
YW5TaG93TUlNRVR5cGVBc0hUTUwodHlwZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGF1dG8gc3ViZnJhbWVVUkwgPSBzdWJmcmFtZU1haW5SZXNvdXJjZS0+dXJs
KCk7CisgICAgICAgICAgICBNYXJrdXBBbmRBcmNoaXZlIHN1YmZyYW1lQ29udGVudCA9IHsgU3Ry
aW5nOjpmcm9tVVRGOChzdWJmcmFtZU1haW5SZXNvdXJjZS0+ZGF0YSgpLmRhdGEoKSwgc3ViZnJh
bWVNYWluUmVzb3VyY2UtPmRhdGEoKS5zaXplKCkpLAorICAgICAgICAgICAgICAgIHN1YmZyYW1l
TWFpblJlc291cmNlLnJlbGVhc2VOb25OdWxsKCksIHN1YmZyYW1lQXJjaGl2ZS5jb3B5UmVmKCkg
fTsKKyAgICAgICAgICAgIGF1dG8gc3ViZnJhbWVNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhB
cmNoaXZlKGRlc3RpbmF0aW9uRG9jdW1lbnQsIHN1YmZyYW1lQ29udGVudCwgY2FuU2hvd01JTUVU
eXBlQXNIVE1MKTsKKworICAgICAgICAgICAgQ1N0cmluZyB1dGY4ID0gc3ViZnJhbWVNYXJrdXAu
dXRmOCgpOworICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJsb2JCdWZmZXI7CisgICAgICAg
ICAgICBibG9iQnVmZmVyLnJlc2VydmVDYXBhY2l0eSh1dGY4Lmxlbmd0aCgpKTsKKyAgICAgICAg
ICAgIGJsb2JCdWZmZXIuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHV0
ZjguZGF0YSgpKSwgdXRmOC5sZW5ndGgoKSk7CisgICAgICAgICAgICBhdXRvIGJsb2IgPSBCbG9i
OjpjcmVhdGUoV1RGTW92ZShibG9iQnVmZmVyKSwgdHlwZSk7CisKKyAgICAgICAgICAgIFN0cmlu
ZyBzdWJmcmFtZUJsb2JVUkwgPSBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkZXN0aW5hdGlvbkRv
Y3VtZW50LCBibG9iKTsKKyAgICAgICAgICAgIGJsb2JVUkxNYXAuc2V0KHN1YmZyYW1lVVJMLnN0
cmluZygpLCBzdWJmcmFtZUJsb2JVUkwpOworICAgICAgICB9CiAKLSAgICAgICAgYXV0byBzdWJm
cmFtZVVSTCA9IHN1YmZyYW1lTWFpblJlc291cmNlLT51cmwoKTsKLSAgICAgICAgTWFya3VwQW5k
QXJjaGl2ZSBzdWJmcmFtZUNvbnRlbnQgPSB7IFN0cmluZzo6ZnJvbVVURjgoc3ViZnJhbWVNYWlu
UmVzb3VyY2UtPmRhdGEoKS5kYXRhKCksIHN1YmZyYW1lTWFpblJlc291cmNlLT5kYXRhKCkuc2l6
ZSgpKSwKLSAgICAgICAgICAgIHN1YmZyYW1lTWFpblJlc291cmNlLnJlbGVhc2VOb25OdWxsKCks
IHN1YmZyYW1lQXJjaGl2ZS5jb3B5UmVmKCkgfTsKLSAgICAgICAgYXV0byBzdWJmcmFtZU1hcmt1
cCA9IHNhbml0aXplTWFya3VwV2l0aEFyY2hpdmUoZGVzdGluYXRpb25Eb2N1bWVudCwgc3ViZnJh
bWVDb250ZW50LCBjYW5TaG93TUlNRVR5cGVBc0hUTUwsIHJlcGxhY2VtZW50SW5mbyk7Ci0KLSAg
ICAgICAgQ1N0cmluZyB1dGY4ID0gc3ViZnJhbWVNYXJrdXAudXRmOCgpOwotICAgICAgICBWZWN0
b3I8dWludDhfdD4gYmxvYkJ1ZmZlcjsKLSAgICAgICAgYmxvYkJ1ZmZlci5yZXNlcnZlQ2FwYWNp
dHkodXRmOC5sZW5ndGgoKSk7Ci0gICAgICAgIGJsb2JCdWZmZXIuYXBwZW5kKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHV0ZjguZGF0YSgpKSwgdXRmOC5sZW5ndGgoKSk7Ci0gICAg
ICAgIGF1dG8gYmxvYiA9IEJsb2I6OmNyZWF0ZShXVEZNb3ZlKGJsb2JCdWZmZXIpLCB0eXBlKTsK
LQotICAgICAgICBTdHJpbmcgc3ViZnJhbWVCbG9iVVJMID0gRE9NVVJMOjpjcmVhdGVPYmplY3RV
UkwoZGVzdGluYXRpb25Eb2N1bWVudCwgYmxvYik7Ci0gICAgICAgIGJsb2JVUkxNYXAuc2V0KHN1
YmZyYW1lVVJMLnN0cmluZygpLCBzdWJmcmFtZUJsb2JVUkwpOwotICAgICAgICByZXBsYWNlbWVu
dEluZm8uYmxvYlVSTFRvQmxvYk1hcC5zZXQoc3ViZnJhbWVCbG9iVVJMLCBXVEZNb3ZlKGJsb2Ip
KTsKLSAgICAgICAgcmVwbGFjZW1lbnRJbmZvLmJsb2JVUkxUb1JlcGxhY2VkVVJMTWFwLnNldChz
dWJmcmFtZUJsb2JVUkwsIHN1YmZyYW1lVVJMLnN0cmluZygpKTsKKyAgICAgICAgcmVwbGFjZVN1
YnJlc291cmNlVVJMcyhmcmFnbWVudC5nZXQoKSwgV1RGTW92ZShibG9iVVJMTWFwKSk7CiAgICAg
fQogCi0gICAgcmVwbGFjZVN1YnJlc291cmNlVVJMcyhmcmFnbWVudC5nZXQoKSwgV1RGTW92ZShi
bG9iVVJMTWFwKSk7Ci0KICAgICBhdXRvKiBib2R5RWxlbWVudCA9IHN0YWdpbmdEb2N1bWVudC0+
Ym9keSgpOwogICAgIEFTU0VSVChib2R5RWxlbWVudCk7CiAgICAgYm9keUVsZW1lbnQtPmFwcGVu
ZENoaWxkKGZyYWdtZW50KTsKQEAgLTM4OCwxNiArNDIwLDE0IEBAIGJvb2wgV2ViQ29udGVudFJl
YWRlcjo6cmVhZFdlYkFyY2hpdmUoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIEJsb2JSZXBsYWNlbWVudEluZm8gcmVwbGFjZW1lbnRJbmZv
OwogICAgIFN0cmluZyBzYW5pdGl6ZWRNYXJrdXAgPSBzYW5pdGl6ZU1hcmt1cFdpdGhBcmNoaXZl
KCpmcmFtZS5kb2N1bWVudCgpLCAqcmVzdWx0LCBbJl0gKGNvbnN0IFN0cmluZyYgdHlwZSkgewog
ICAgICAgICByZXR1cm4gZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY2FuU2hvd01JTUVUeXBlQXNI
VE1MKHR5cGUpOwotICAgIH0sIHJlcGxhY2VtZW50SW5mbyk7CisgICAgfSk7CiAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIHNhbml0aXpl
ZE1hcmt1cCwgYmxhbmtVUkwoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsK
IAogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlcGxh
Y2VSaWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92
ZShyZXBsYWNlbWVudEluZm8pKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE3LDEwICs0
NDcsOSBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRXZWJBcmNoaXZlKFNoYXJl
ZEJ1ZmZlciYgYnVmZmVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBCbG9i
UmVwbGFjZW1lbnRJbmZvIHJlcGxhY2VtZW50SW5mbzsKICAgICBtYXJrdXAgPSBzYW5pdGl6ZU1h
cmt1cFdpdGhBcmNoaXZlKCpmcmFtZS5kb2N1bWVudCgpLCAqcmVzdWx0LCBbJl0gKGNvbnN0IFN0
cmluZyYgdHlwZSkgewogICAgICAgICByZXR1cm4gZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuY2Fu
U2hvd01JTUVUeXBlQXNIVE1MKHR5cGUpOwotICAgIH0sIHJlcGxhY2VtZW50SW5mbyk7CisgICAg
fSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ2OCwyNCArNDk3LDEzIEBAIGJvb2wgV2Vi
Q29udGVudE1hcmt1cFJlYWRlcjo6cmVhZEhUTUwoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAg
cmV0dXJuICFtYXJrdXAuaXNFbXB0eSgpOwogfQogCi1zdGF0aWMgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoRnJhbWUmIGZyYW1lLCBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKLXsKLSAgICBCbG9iUmVwbGFjZW1lbnRJbmZvIHJl
cGxhY2VtZW50SW5mbzsKLSAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRBbmRBZGRS
ZXNvdXJjZXMoZnJhbWUsIHN0cmluZywgcmVwbGFjZW1lbnRJbmZvKTsKLSAgICBpZiAoIWZyYWdt
ZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJlcGxhY2VSaWNoQ29udGVudFdp
dGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwgV1RGTW92ZShyZXBsYWNlbWVudElu
Zm8pKTsKLSAgICByZXR1cm4gZnJhZ21lbnQ7Ci19Ci0KIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6
cmVhZFJURkQoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKGZyYW1lLnNldHRpbmdz
KCkucHJlZmVyTUlNRVR5cGVGb3JJbWFnZXMoKSB8fCAhZnJhbWUuZG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFJURkQ6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgp
IGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSk7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoZnJhbWUsIHN0cmluZy5nZXQoKSk7CisgICAg
YXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBzdHJp
bmcuZ2V0KCkpOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBhZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTQ5OCw3ICs1MTYs
NyBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEZEKFNoYXJlZEJ1ZmZlciYg
YnVmZmVyKQogICAgIGlmICghZnJhbWUuZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGF1dG8gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhSVEZEOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKSBkb2N1bWVudEF0dHJpYnV0
ZXM6bnVsbHB0cl0pOwotICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21BdHRy
aWJ1dGVkU3RyaW5nKGZyYW1lLCBzdHJpbmcuZ2V0KCkpOworICAgIGF1dG8gZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEFuZEFkZFJlc291cmNlcyhmcmFtZSwgc3RyaW5nLmdldCgpKTsKICAgICBp
ZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxMiw3ICs1MzAsNyBA
QCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRSVEYoU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGF1dG8gc3RyaW5nID0gYWRvcHROUyhbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhSVEY6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdl
dCgpIGRvY3VtZW50QXR0cmlidXRlczpudWxscHRyXSk7Ci0gICAgYXV0byBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoZnJhbWUsIHN0cmluZy5nZXQoKSk7Cisg
ICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50QW5kQWRkUmVzb3VyY2VzKGZyYW1lLCBz
dHJpbmcuZ2V0KCkpOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBhZGRGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKQEAgLTUyNSw3ICs1
NDMsNyBAQCBib29sIFdlYkNvbnRlbnRNYXJrdXBSZWFkZXI6OnJlYWRSVEYoU2hhcmVkQnVmZmVy
JiBidWZmZXIpCiAgICAgaWYgKCFmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgYXV0byBzdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFJURjpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCkgZG9jdW1lbnRBdHRyaWJ1
dGVzOm51bGxwdHJdKTsKLSAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tQXR0
cmlidXRlZFN0cmluZyhmcmFtZSwgc3RyaW5nLmdldCgpKTsKKyAgICBhdXRvIGZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRBbmRBZGRSZXNvdXJjZXMoZnJhbWUsIHN0cmluZy5nZXQoKSk7CiAgICAg
aWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1hcmt1cCA9IGNyZWF0
ZU1hcmt1cCgqZnJhZ21lbnQpOwpAQCAtNTQ4LDEzICs1NjYsMTUgQEAgYm9vbCBXZWJDb250ZW50
UmVhZGVyOjpyZWFkSW1hZ2UoUmVmPFNoYXJlZEJ1ZmZlcj4mJiBidWZmZXIsIGNvbnN0IFN0cmlu
ZyYgdHlwZSkKICAgICBhdXRvIGJsb2IgPSBCbG9iOjpjcmVhdGUoYnVmZmVyLmdldCgpLCB0eXBl
KTsKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7CiAgICAgYXV0byYgZG9jdW1lbnQgPSAq
ZnJhbWUuZG9jdW1lbnQoKTsKLSAgICBTdHJpbmcgYmxvYlVSTCA9IERPTVVSTDo6Y3JlYXRlT2Jq
ZWN0VVJMKGRvY3VtZW50LCBibG9iKTsKLSAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZv
ckltYWdlQW5kVVJMKGRvY3VtZW50LCBibG9iVVJMKSk7CisKKyAgICBpZiAoc2hvdWxkUmVwbGFj
ZVJpY2hDb250ZW50V2l0aEF0dGFjaG1lbnRzKCkpCisgICAgICAgIGFkZEZyYWdtZW50KGNyZWF0
ZUZyYWdtZW50Rm9ySW1hZ2VBdHRhY2htZW50KGRvY3VtZW50LCBXVEZNb3ZlKGJsb2IpKSk7Cisg
ICAgZWxzZQorICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZvckltYWdlQW5kVVJM
KGRvY3VtZW50LCBET01VUkw6OmNyZWF0ZU9iamVjdFVSTChkb2N1bWVudCwgYmxvYikpKTsKIAog
ICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJlcGxhY2VS
aWNoQ29udGVudFdpdGhBdHRhY2htZW50c0lmTmVjZXNzYXJ5KCpmcmFnbWVudCwge3t7IGJsb2JV
UkwsIFdURk1vdmUoYmxvYikgfX0sIHsgfX0pOwogICAgIHJldHVybiB0cnVlOwogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>