<?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>218927</bug_id>
          
          <creation_ts>2020-11-13 16:16:50 -0800</creation_ts>
          <short_desc>[webkitcorepy] Support mocking request network calls.</short_desc>
          <delta_ts>2020-11-17 13:02:14 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=218827</see_also>
          <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="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1707424</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-13 16:16:50 -0800</bug_when>
    <thetext>Similar to the utilities provided for subprocess, we should provide utilities to mock request&apos;s network calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707429</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-13 16:23:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/71389720&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1707469</commentid>
    <comment_count>2</comment_count>
      <attachid>414122</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-13 20:38:19 -0800</bug_when>
    <thetext>Created attachment 414122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708021</commentid>
    <comment_count>3</comment_count>
      <attachid>414122</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-11-16 15:24:59 -0800</bug_when>
    <thetext>Comment on attachment 414122
Patch

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

rs=me.

&gt; Tools/ChangeLog:11
&gt; +        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests.py: Moved to requests_.

why?

&gt; Tools/Scripts/libraries/webkitcorepy/webkitcorepy/tests/mocks/requests_unittest.py:29
&gt; +class MockRequests(unittest.TestCase):

can we add more unit-tests here, maybe for headers, and also request_.Response class (various status codes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708024</commentid>
    <comment_count>4</comment_count>
      <attachid>414122</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-16 15:51:49 -0800</bug_when>
    <thetext>Comment on attachment 414122
Patch

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

&gt;&gt; Tools/ChangeLog:11
&gt;&gt; +        * Scripts/libraries/webkitcorepy/webkitcorepy/mocks/requests.py: Moved to requests_.
&gt; 
&gt; why?

Otherwise Python 2 gets very confused when trying to import requests from requests.py.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708330</commentid>
    <comment_count>5</comment_count>
      <attachid>414367</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-11-17 12:14:37 -0800</bug_when>
    <thetext>Created attachment 414367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1708353</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-17 13:02:14 -0800</bug_when>
    <thetext>Committed r269919: &lt;https://trac.webkit.org/changeset/269919&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414367.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414122</attachid>
            <date>2020-11-13 20:38:19 -0800</date>
            <delta_ts>2020-11-17 12:14:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218927-20201113203818.patch</filename>
            <type>text/plain</type>
            <size>15343</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2OTgwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDIwLTExLTEzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBTdXBwb3J0IG1vY2tpbmcgcmVxdWVzdCBuZXR3
b3JrIGNhbGxzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE4OTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM4OTcyMD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1bXAgdmVyc2lvbi4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L21vY2tz
L19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHMucHk6IE1vdmVkIHRvIHJlcXVlc3RzXy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L21vY2tzL3Jl
cXVlc3RzXy5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0cy5weS4KKyAgICAgICAgKFJlc3BvbnNlKTog
T2JqZWN0IG1pbWlja2luZyB0aGUgc3RydWN0dXJlIG9mIFJlcXVlc3RzJ3MgcmVzcG9uc2Ugb2Jq
ZWN0LCB1c2VmdWwgZm9yIG1vY2tpbmcuCisgICAgICAgIChSZXF1ZXN0cyk6IENvbnRleHQgbWFu
YWdlciB3aGljaCB3aWxsIGludGVyY2VwdCBodHRwIGFuZCBodHRwcyByZXF1ZXN0cyB0byBhIHNw
ZWNpZmljIGhvc3QuCisgICAgICAgIChSZXF1ZXN0cy5fX2V4aXRfXyk6CisgICAgICAgICogU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9tb2Nrcy9yZXF1
ZXN0c191bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChNb2NrUmVxdWVzdHMpOgorICAgICAg
ICAoTW9ja1JlcXVlc3RzLnRlc3RfYmFzaWMpOgorICAgICAgICAoTW9ja1JlcXVlc3RzLnRlc3Rf
ZmFsbGJhY2spOgorCiAyMDIwLTExLTEzICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxl
LmNvbT4KIAogICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gVXBkYXRlIENvbXBpbGVXZWJLaXQg
c3RlcCBmb3IgbmV3IGJ1aWxkYm90CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJl
dmlzaW9uIDI2OTgwMykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAg
ZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJraXRjb3Jl
cHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nl
c3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNh
cHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQogCi12ZXJzaW9uID0gVmVyc2lv
bigwLCA0LCAyMCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDQsIDIxKQogCiBmcm9tIHdlYmtpdGNv
cmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0b0luc3RhbGwKIGlmIHN5cy52ZXJz
aW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L21vY2tzL19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvX19pbml0
X18ucHkJKHJldmlzaW9uIDI2OTgwMykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDQgKzI0LDQgQEAgZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MuY29udGV4dF9zdGFjayBpbQog
ZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MudGltZV8gaW1wb3J0IFRpbWUKIGZyb20gd2Via2l0Y29y
ZXB5Lm1vY2tzLnN1YnByb2Nlc3MgaW1wb3J0IFByb2Nlc3NDb21wbGV0aW9uLCBTdWJwcm9jZXNz
CiAKLWZyb20gd2Via2l0Y29yZXB5Lm1vY2tzLnJlcXVlc3RzIGltcG9ydCBSZXNwb25zZQorZnJv
bSB3ZWJraXRjb3JlcHkubW9ja3MucmVxdWVzdHNfIGltcG9ydCBSZXNwb25zZSwgUmVxdWVzdHMK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
bW9ja3MvcmVxdWVzdHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0cy5weQkocmV2aXNpb24gMjY5
ODAzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVw
eS9tb2Nrcy9yZXF1ZXN0cy5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDYyICswLDAgQEAKLSMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0jIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotIyBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGpzb24KLQotCi1jbGFzcyBS
ZXNwb25zZShvYmplY3QpOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZnJvbVRleHQoZGF0
YSwgdXJsPU5vbmUpOgotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCBzdHIpCi0gICAg
ICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWRhdGEsIHVybD11cmwpCi0KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIGZyb21Kc29uKGRhdGEsIHVybD1Ob25lKToKLSAgICAgICAgYXNzZXJ0IGlz
aW5zdGFuY2UoZGF0YSwgbGlzdCkgb3IgaXNpbnN0YW5jZShkYXRhLCBkaWN0KQotICAgICAgICBy
ZXR1cm4gUmVzcG9uc2UodGV4dD1qc29uLmR1bXBzKGRhdGEpLCB1cmw9dXJsKQotCi0gICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGU0MDQodXJsPU5vbmUpOgotICAgICAgICByZXR1cm4g
UmVzcG9uc2Uoc3RhdHVzX2NvZGU9NDA0LCB1cmw9dXJsKQotCi0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIHN0YXR1c19jb2RlPU5vbmUsIHRleHQ9Tm9uZSwgdXJsPU5vbmUpOgotICAgICAgICBpZiBz
dGF0dXNfY29kZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBz
dGF0dXNfY29kZQotICAgICAgICBlbGlmIHRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBz
ZWxmLnN0YXR1c19jb2RlID0gMjAwCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnN0
YXR1c19jb2RlID0gMjA0ICAjIE5vIGNvbnRlbnQKLSAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAot
ICAgICAgICBzZWxmLnVybCA9IHVybAotCi0gICAgZGVmIGpzb24oc2VsZik6Ci0gICAgICAgIHJl
dHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKLQotICAgIGRlZiBpdGVyX2NvbnRlbnQoc2VsZiwg
Y2h1bmtfc2l6ZT00MDk2KToKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYudGV4
dCksIGNodW5rX3NpemUpOgotICAgICAgICAgICAgeWllbGQgc2VsZi50ZXh0W2k6aSArIGNodW5r
X3NpemVdCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgot
Ci0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHBhc3MK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
bW9ja3MvcmVxdWVzdHNfLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHNfLnB5CShyZXZpc2lvbiAy
Njk4MDMpCShmcm9tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvbW9ja3MvcmVxdWVzdHMucHk6MjY5ODAzKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0c18ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisj
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCitpbXBvcnQganNvbgorCisKK2NsYXNzIFJlc3BvbnNlKG9iamVjdCk6CisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBmcm9tVGV4dChkYXRhLCB1cmw9Tm9uZSk6CisgICAgICAgIGFzc2Vy
dCBpc2luc3RhbmNlKGRhdGEsIHN0cikKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlKHRleHQ9ZGF0
YSwgdXJsPXVybCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZnJvbUpzb24oZGF0YSwg
dXJsPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCBsaXN0KSBvciBpc2lu
c3RhbmNlKGRhdGEsIGRpY3QpCisgICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWpzb24uZHVt
cHMoZGF0YSksIHVybD11cmwpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNyZWF0ZTQw
NCh1cmw9Tm9uZSk6CisgICAgICAgIHJldHVybiBSZXNwb25zZShzdGF0dXNfY29kZT00MDQsIHVy
bD11cmwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9Tm9uZSwgdGV4dD1O
b25lLCB1cmw9Tm9uZSk6CisgICAgICAgIGlmIHN0YXR1c19jb2RlIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19jb2RlCisgICAgICAgIGVsaWYgdGV4
dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSAyMDAKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdHVzX2NvZGUgPSAyMDQgICMgTm8gY29udGVu
dAorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYudXJsID0gdXJsCisKKyAg
ICBkZWYganNvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIGpzb24ubG9hZHMoc2VsZi50ZXh0KQor
CisgICAgZGVmIGl0ZXJfY29udGVudChzZWxmLCBjaHVua19zaXplPTQwOTYpOgorICAgICAgICBm
b3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi50ZXh0KSwgY2h1bmtfc2l6ZSk6CisgICAgICAgICAg
ICB5aWVsZCBzZWxmLnRleHRbaTppICsgY2h1bmtfc2l6ZV0KKworICAgIGRlZiBfX2VudGVyX18o
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFy
Z3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFzcwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0c18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9t
b2Nrcy9yZXF1ZXN0c18ucHkJKHJldmlzaW9uIDI2OTgwMykKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHNfLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMiwyMyArMjIsMzEgQEAKIAogaW1wb3J0IGpzb24KIAorZnJvbSB3ZWJr
aXRjb3JlcHkgaW1wb3J0IHN0cmluZ191dGlscworZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MgaW1w
b3J0IENvbnRleHRTdGFjaworCiAKIGNsYXNzIFJlc3BvbnNlKG9iamVjdCk6CiAgICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBmcm9tVGV4dChkYXRhLCB1cmw9Tm9uZSk6CisgICAgZGVmIGZyb21U
ZXh0KGRhdGEsIHVybD1Ob25lLCBoZWFkZXJzPU5vbmUpOgogICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShkYXRhLCBzdHIpCi0gICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWRhdGEsIHVybD11
cmwpCisgICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWRhdGEsIHVybD11cmwsIGhlYWRlcnM9
aGVhZGVycykKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZnJvbUpzb24oZGF0YSwgdXJs
PU5vbmUpOgorICAgIGRlZiBmcm9tSnNvbihkYXRhLCB1cmw9Tm9uZSwgaGVhZGVycz1Ob25lKToK
ICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgbGlzdCkgb3IgaXNpbnN0YW5jZShkYXRh
LCBkaWN0KQotICAgICAgICByZXR1cm4gUmVzcG9uc2UodGV4dD1qc29uLmR1bXBzKGRhdGEpLCB1
cmw9dXJsKQorCisgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzIG9yIHt9CisgICAgICAgIGlmICdD
b250ZW50LVR5cGUnIG5vdCBpbiBoZWFkZXJzOgorICAgICAgICAgICAgaGVhZGVyc1snQ29udGVu
dC1UeXBlJ10gPSAndGV4dC9qc29uJworCisgICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWpz
b24uZHVtcHMoZGF0YSksIHVybD11cmwsIGhlYWRlcnM9aGVhZGVycykKIAogICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgY3JlYXRlNDA0KHVybD1Ob25lKToKLSAgICAgICAgcmV0dXJuIFJlc3Bv
bnNlKHN0YXR1c19jb2RlPTQwNCwgdXJsPXVybCkKKyAgICBkZWYgY3JlYXRlNDA0KHVybD1Ob25l
LCBoZWFkZXJzPU5vbmUpOgorICAgICAgICByZXR1cm4gUmVzcG9uc2Uoc3RhdHVzX2NvZGU9NDA0
LCB1cmw9dXJsLCBoZWFkZXJzPWhlYWRlcnMpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3Rh
dHVzX2NvZGU9Tm9uZSwgdGV4dD1Ob25lLCB1cmw9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHN0YXR1c19jb2RlPU5vbmUsIHRleHQ9Tm9uZSwgdXJsPU5vbmUsIGhlYWRlcnM9Tm9uZSk6
CiAgICAgICAgIGlmIHN0YXR1c19jb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5z
dGF0dXNfY29kZSA9IHN0YXR1c19jb2RlCiAgICAgICAgIGVsaWYgdGV4dCBpcyBub3QgTm9uZToK
QEAgLTQ3LDYgKzU1LDEyIEBAIGNsYXNzIFJlc3BvbnNlKG9iamVjdCk6CiAgICAgICAgICAgICBz
ZWxmLnN0YXR1c19jb2RlID0gMjA0ICAjIE5vIGNvbnRlbnQKICAgICAgICAgc2VsZi50ZXh0ID0g
dGV4dAogICAgICAgICBzZWxmLnVybCA9IHVybAorICAgICAgICBzZWxmLmhlYWRlcnMgPSBoZWFk
ZXJzIG9yIHt9CisKKyAgICAgICAgaWYgJ0NvbnRlbnQtVHlwZScgbm90IGluIHNlbGYuaGVhZGVy
czoKKyAgICAgICAgICAgIHNlbGYuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dCcKKyAg
ICAgICAgaWYgJ0NvbnRlbnQtTGVuZ3RoJyBub3QgaW4gc2VsZi5oZWFkZXJzOgorICAgICAgICAg
ICAgc2VsZi5oZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gbGVuKHNlbGYudGV4dCkgaWYgc2Vs
Zi50ZXh0IGVsc2UgMAogCiAgICAgZGVmIGpzb24oc2VsZik6CiAgICAgICAgIHJldHVybiBqc29u
LmxvYWRzKHNlbGYudGV4dCkKQEAgLTU1LDggKzY5LDYxIEBAIGNsYXNzIFJlc3BvbnNlKG9iamVj
dCk6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzZWxmLnRleHQpLCBjaHVua19zaXpl
KToKICAgICAgICAgICAgIHlpZWxkIHNlbGYudGV4dFtpOmkgKyBjaHVua19zaXplXQogCisgICAg
ZGVmIGl0ZXJfbGluZXMoc2VsZik6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYudGV4dC5zcGxp
dGxpbmVzKCkgaWYgc2VsZi50ZXh0IGVsc2UgW106CisgICAgICAgICAgICB5aWVsZCBzdHJpbmdf
dXRpbHMuZW5jb2RlKGxpbmUpCisKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICBy
ZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAg
ICAgICAgIHBhc3MKKworCitjbGFzcyBSZXF1ZXN0cyhDb250ZXh0U3RhY2spOgorICAgIHRvcCA9
IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqaG9zdHMpOgorICAgICAgICBzdXBlcihS
ZXF1ZXN0cywgc2VsZikuX19pbml0X18oY2xzPVJlcXVlc3RzKQorICAgICAgICBzZWxmLmhvc3Rz
ID0gaG9zdHMKKyAgICAgICAgc2VsZi5fdGVtcF9wYXRjaGVzID0gTm9uZQorCisgICAgZGVmIHJl
cXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIFJlc3Bv
bnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAj
IEFsbG93IHJlcXVlc3RzIGFuZCBtb2NrIHRvIGJlIG1hbmFnZWQgdmlhIGF1dG9pbnN0YWxsCisg
ICAgICAgIGltcG9ydCByZXF1ZXN0cworICAgICAgICBmcm9tIG1vY2sgaW1wb3J0IHBhdGNoCisK
KyAgICAgICAgdGhpcyA9IHNlbGYKKworICAgICAgICBjbGFzcyBTZXNzaW9uKHJlcXVlc3RzLlNl
c3Npb24pOgorICAgICAgICAgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsICoqa3dh
cmdzKToKKyAgICAgICAgICAgICAgICBmb3IgaG9zdCBpbiB0aGlzLmhvc3RzOgorICAgICAgICAg
ICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIFsnaHR0cHM6Ly97fScuZm9ybWF0KGhvc3QpLCAn
aHR0cDovL3t9Jy5mb3JtYXQoaG9zdCldOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdXJs
ID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5y
ZXF1ZXN0KG1ldGhvZCwgdXJsLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IHVybC5zdGFydHN3aXRoKCd7fS8nLmZvcm1hdChjYW5kaWRhdGUpKSBvciB1cmwuc3RhcnRzd2l0
aCgne30/Jy5mb3JtYXQoY2FuZGlkYXRlKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMucmVxdWVzdChtZXRob2QsIHVybCwgKiprd2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN1cGVyKFNlc3Npb24sIHNlbGYpLnJlcXVlc3QobWV0aG9kLCB1cmwsICoqa3dh
cmdzKQorCisgICAgICAgIHNlbGYuX3RlbXBfcGF0Y2hlcyA9IFsKKyAgICAgICAgICAgIHBhdGNo
KCdyZXF1ZXN0cy5TZXNzaW9uJywgbmV3PVNlc3Npb24pLAorICAgICAgICAgICAgcGF0Y2goJ3Jl
cXVlc3RzLnJlcXVlc3QnLCBuZXc9bGFtYmRhICphcmdzLCAqKmt3YXJnczogU2Vzc2lvbigpLnJl
cXVlc3QoKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMuZ2V0
JywgbmV3PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFNlc3Npb24oKS5yZXF1ZXN0KCdHRVQnLCAq
YXJncywgKiprd2FyZ3MpKSwKKyAgICAgICAgICAgIHBhdGNoKCdyZXF1ZXN0cy5oZWFkJywgbmV3
PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFNlc3Npb24oKS5yZXF1ZXN0KCdIRUFEJywgKmFyZ3Ms
ICoqa3dhcmdzKSksCisgICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMucG9zdCcsIG5ldz1sYW1i
ZGEgKmFyZ3MsICoqa3dhcmdzOiBTZXNzaW9uKCkucmVxdWVzdCgnUE9TVCcsICphcmdzLCAqKmt3
YXJncykpLAorICAgICAgICAgICAgcGF0Y2goJ3JlcXVlc3RzLnB1dCcsIG5ldz1sYW1iZGEgKmFy
Z3MsICoqa3dhcmdzOiBTZXNzaW9uKCkucmVxdWVzdCgnUFVUJywgKmFyZ3MsICoqa3dhcmdzKSks
CisgICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMucGF0Y2gnLCBuZXc9bGFtYmRhICphcmdzLCAq
Kmt3YXJnczogU2Vzc2lvbigpLnJlcXVlc3QoJ1BBVENIJywgKmFyZ3MsICoqa3dhcmdzKSksCisg
ICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMuZGVsZXRlJywgbmV3PWxhbWJkYSAqYXJncywgKipr
d2FyZ3M6IFNlc3Npb24oKS5yZXF1ZXN0KCdERUxFVEUnLCAqYXJncywgKiprd2FyZ3MpKSwKKyAg
ICAgICAgXQorICAgICAgICBmb3IgcGF0Y2ggaW4gc2VsZi5fdGVtcF9wYXRjaGVzOgorICAgICAg
ICAgICAgcGF0Y2guX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKFJlcXVlc3RzLCBz
ZWxmKS5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHN1cGVyKFJlcXVlc3RzLCBzZWxmKS5fX2V4aXRfXygqYXJncywgKiprd2Fy
Z3MpCisgICAgICAgIGZvciBwYXRjaCBpbiByZXZlcnNlZChzZWxmLl90ZW1wX3BhdGNoZXMpOgor
ICAgICAgICAgICAgcGF0Y2guX19leGl0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxm
Ll90ZW1wX3BhdGNoZXMgPSBOb25lCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL21vY2tzL3JlcXVlc3RzX3VuaXR0ZXN0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvdGVzdHMvbW9ja3MvcmVxdWVzdHNfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9t
b2Nrcy9yZXF1ZXN0c191bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCByZXF1ZXN0cwor
aW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcworCisKK2Ns
YXNzIE1vY2tSZXF1ZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYXNp
YyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5SZXF1ZXN0cygnd2Via2l0Lm9yZycpOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0cy5nZXQoJ2h0dHBzOi8vd2Via2l0Lm9y
ZycpLnN0YXR1c19jb2RlLCA0MDQpCisKKyAgICBkZWYgdGVzdF9mYWxsYmFjayhzZWxmKToKKyAg
ICAgICAgd2l0aCBtb2Nrcy5SZXF1ZXN0cygnd2Via2l0Lm9yZycpOgorICAgICAgICAgICAgd2l0
aCBtb2Nrcy5SZXF1ZXN0cygnYnVncy53ZWJraXQub3JnJyk6CisgICAgICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChyZXF1ZXN0cy5nZXQoJ2h0dHBzOi8vd2Via2l0Lm9yZycpLnN0YXR1c19j
b2RlLCA0MDQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414367</attachid>
            <date>2020-11-17 12:14:37 -0800</date>
            <delta_ts>2020-11-17 13:02:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218927-20201117121436.patch</filename>
            <type>text/plain</type>
            <size>16549</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2OTkxNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIzIEBACisyMDIwLTExLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBTdXBwb3J0IG1vY2tpbmcgcmVxdWVzdCBuZXR3
b3JrIGNhbGxzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE4OTI3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83MTM4OTcyMD4KKworICAgICAgICBS
dWJiZXItc3RhbXBlZCBieSBBYWthc2ggSmFpbi4KKworICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHk6IEJ1bXAgdmVyc2lvbi4K
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L21v
Y2tzL19faW5pdF9fLnB5OgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHMucHk6IE1vdmVkIHRvIHJlcXVlc3RzXy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L21vY2tz
L3JlcXVlc3RzXy5weTogQ29waWVkIGZyb20gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0cy5weS4KKyAgICAgICAgKFJlc3BvbnNl
KTogT2JqZWN0IG1pbWlja2luZyB0aGUgc3RydWN0dXJlIG9mIFJlcXVlc3RzJ3MgcmVzcG9uc2Ug
b2JqZWN0LCB1c2VmdWwgZm9yIG1vY2tpbmcuCisgICAgICAgIChSZXF1ZXN0cyk6IENvbnRleHQg
bWFuYWdlciB3aGljaCB3aWxsIGludGVyY2VwdCBodHRwIGFuZCBodHRwcyByZXF1ZXN0cyB0byBh
IHNwZWNpZmljIGhvc3QuCisgICAgICAgIChSZXF1ZXN0cy5fX2V4aXRfXyk6CisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9tb2Nrcy9y
ZXF1ZXN0c191bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChNb2NrUmVxdWVzdHMpOgorICAg
ICAgICAoTW9ja1JlcXVlc3RzLnRlc3RfYmFzaWMpOgorICAgICAgICAoTW9ja1JlcXVlc3RzLnRl
c3RfZmFsbGJhY2spOgorCiAyMDIwLTExLTE3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFw
cGxlLmNvbT4KIAogICAgICAgICBbYnVpbGQud2Via2l0Lm9yZ10gVXBkYXRlIEV4dHJhY3RUZXN0
UmVzdWx0cyBzdGVwIGZvciBuZXcgYnVpbGRib3QgKGZvbGxvdy11cCBmaXgpCkluZGV4OiBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJr
aXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2OTkxNCkKKysrIFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDcgKzM1LDcgQEAgZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQg
VGltZW91dAogZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91
dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0
X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxp
Y2F0ZQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAyMCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAs
IDQsIDIxKQogCiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwg
QXV0b0luc3RhbGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkluZGV4OiBUb29scy9T
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L21vY2tzL19faW5pdF9f
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93
ZWJraXRjb3JlcHkvbW9ja3MvX19pbml0X18ucHkJKHJldmlzaW9uIDI2OTkxNCkKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvX19pbml0
X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTI0LDQgKzI0LDQgQEAgZnJvbSB3ZWJraXRjb3JlcHku
bW9ja3MuY29udGV4dF9zdGFjayBpbQogZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MudGltZV8gaW1w
b3J0IFRpbWUKIGZyb20gd2Via2l0Y29yZXB5Lm1vY2tzLnN1YnByb2Nlc3MgaW1wb3J0IFByb2Nl
c3NDb21wbGV0aW9uLCBTdWJwcm9jZXNzCiAKLWZyb20gd2Via2l0Y29yZXB5Lm1vY2tzLnJlcXVl
c3RzIGltcG9ydCBSZXNwb25zZQorZnJvbSB3ZWJraXRjb3JlcHkubW9ja3MucmVxdWVzdHNfIGlt
cG9ydCBSZXNwb25zZSwgUmVxdWVzdHMKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHMucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9y
ZXF1ZXN0cy5weQkocmV2aXNpb24gMjY5OTE0KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0cy5weQkobm9uZXhpc3RlbnQp
CkBAIC0xLDYyICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0Ogot
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSMgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotIyBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0jIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgotIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotIyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
aW1wb3J0IGpzb24KLQotCi1jbGFzcyBSZXNwb25zZShvYmplY3QpOgotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgZnJvbVRleHQoZGF0YSwgdXJsPU5vbmUpOgotICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZShkYXRhLCBzdHIpCi0gICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0PWRhdGEsIHVy
bD11cmwpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGZyb21Kc29uKGRhdGEsIHVybD1O
b25lKToKLSAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgbGlzdCkgb3IgaXNpbnN0YW5j
ZShkYXRhLCBkaWN0KQotICAgICAgICByZXR1cm4gUmVzcG9uc2UodGV4dD1qc29uLmR1bXBzKGRh
dGEpLCB1cmw9dXJsKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGU0MDQodXJs
PU5vbmUpOgotICAgICAgICByZXR1cm4gUmVzcG9uc2Uoc3RhdHVzX2NvZGU9NDA0LCB1cmw9dXJs
KQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1c19jb2RlPU5vbmUsIHRleHQ9Tm9uZSwg
dXJsPU5vbmUpOgotICAgICAgICBpZiBzdGF0dXNfY29kZSBpcyBub3QgTm9uZToKLSAgICAgICAg
ICAgIHNlbGYuc3RhdHVzX2NvZGUgPSBzdGF0dXNfY29kZQotICAgICAgICBlbGlmIHRleHQgaXMg
bm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gMjAwCi0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gMjA0ICAjIE5vIGNvbnRlbnQKLSAg
ICAgICAgc2VsZi50ZXh0ID0gdGV4dAotICAgICAgICBzZWxmLnVybCA9IHVybAotCi0gICAgZGVm
IGpzb24oc2VsZik6Ci0gICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKLQotICAg
IGRlZiBpdGVyX2NvbnRlbnQoc2VsZiwgY2h1bmtfc2l6ZT00MDk2KToKLSAgICAgICAgZm9yIGkg
aW4gcmFuZ2UoMCwgbGVuKHNlbGYudGV4dCksIGNodW5rX3NpemUpOgotICAgICAgICAgICAgeWll
bGQgc2VsZi50ZXh0W2k6aSArIGNodW5rX3NpemVdCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAq
Kmt3YXJncyk6Ci0gICAgICAgIHBhc3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHNfLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3Mv
cmVxdWVzdHNfLnB5CShyZXZpc2lvbiAyNjk5MTQpCShmcm9tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvbW9ja3MvcmVxdWVzdHMucHk6MjY5OTE0KQor
KysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nr
cy9yZXF1ZXN0c18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQganNvbgorCisKK2NsYXNzIFJlc3Bv
bnNlKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9tVGV4dChkYXRhLCB1
cmw9Tm9uZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIHN0cikKKyAgICAgICAg
cmV0dXJuIFJlc3BvbnNlKHRleHQ9ZGF0YSwgdXJsPXVybCkKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgZnJvbUpzb24oZGF0YSwgdXJsPU5vbmUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShkYXRhLCBsaXN0KSBvciBpc2luc3RhbmNlKGRhdGEsIGRpY3QpCisgICAgICAgIHJldHVy
biBSZXNwb25zZSh0ZXh0PWpzb24uZHVtcHMoZGF0YSksIHVybD11cmwpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGNyZWF0ZTQwNCh1cmw9Tm9uZSk6CisgICAgICAgIHJldHVybiBSZXNw
b25zZShzdGF0dXNfY29kZT00MDQsIHVybD11cmwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
c3RhdHVzX2NvZGU9Tm9uZSwgdGV4dD1Ob25lLCB1cmw9Tm9uZSk6CisgICAgICAgIGlmIHN0YXR1
c19jb2RlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1
c19jb2RlCisgICAgICAgIGVsaWYgdGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYu
c3RhdHVzX2NvZGUgPSAyMDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RhdHVz
X2NvZGUgPSAyMDQgICMgTm8gY29udGVudAorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAg
ICAgIHNlbGYudXJsID0gdXJsCisKKyAgICBkZWYganNvbihzZWxmKToKKyAgICAgICAgcmV0dXJu
IGpzb24ubG9hZHMoc2VsZi50ZXh0KQorCisgICAgZGVmIGl0ZXJfY29udGVudChzZWxmLCBjaHVu
a19zaXplPTQwOTYpOgorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi50ZXh0KSwg
Y2h1bmtfc2l6ZSk6CisgICAgICAgICAgICB5aWVsZCBzZWxmLnRleHRbaTppICsgY2h1bmtfc2l6
ZV0KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAg
ICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFzcwpJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nr
cy9yZXF1ZXN0c18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3dlYmtpdGNvcmVweS9tb2Nrcy9yZXF1ZXN0c18ucHkJKHJldmlzaW9uIDI2OTkx
NCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
bW9ja3MvcmVxdWVzdHNfLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyMyArMjIsMzEgQEAKIAog
aW1wb3J0IGpzb24KIAorZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IHN0cmluZ191dGlscworZnJv
bSB3ZWJraXRjb3JlcHkubW9ja3MgaW1wb3J0IENvbnRleHRTdGFjaworCiAKIGNsYXNzIFJlc3Bv
bnNlKG9iamVjdCk6CiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBmcm9tVGV4dChkYXRhLCB1
cmw9Tm9uZSk6CisgICAgZGVmIGZyb21UZXh0KGRhdGEsIHVybD1Ob25lLCBoZWFkZXJzPU5vbmUp
OgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCBzdHIpCi0gICAgICAgIHJldHVybiBS
ZXNwb25zZSh0ZXh0PWRhdGEsIHVybD11cmwpCisgICAgICAgIHJldHVybiBSZXNwb25zZSh0ZXh0
PWRhdGEsIHVybD11cmwsIGhlYWRlcnM9aGVhZGVycykKIAogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgZnJvbUpzb24oZGF0YSwgdXJsPU5vbmUpOgorICAgIGRlZiBmcm9tSnNvbihkYXRhLCB1
cmw9Tm9uZSwgaGVhZGVycz1Ob25lKToKICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwg
bGlzdCkgb3IgaXNpbnN0YW5jZShkYXRhLCBkaWN0KQotICAgICAgICByZXR1cm4gUmVzcG9uc2Uo
dGV4dD1qc29uLmR1bXBzKGRhdGEpLCB1cmw9dXJsKQorCisgICAgICAgIGhlYWRlcnMgPSBoZWFk
ZXJzIG9yIHt9CisgICAgICAgIGlmICdDb250ZW50LVR5cGUnIG5vdCBpbiBoZWFkZXJzOgorICAg
ICAgICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9qc29uJworCisgICAgICAg
IHJldHVybiBSZXNwb25zZSh0ZXh0PWpzb24uZHVtcHMoZGF0YSksIHVybD11cmwsIGhlYWRlcnM9
aGVhZGVycykKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlNDA0KHVybD1Ob25l
KToKLSAgICAgICAgcmV0dXJuIFJlc3BvbnNlKHN0YXR1c19jb2RlPTQwNCwgdXJsPXVybCkKKyAg
ICBkZWYgY3JlYXRlNDA0KHVybD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICByZXR1cm4g
UmVzcG9uc2Uoc3RhdHVzX2NvZGU9NDA0LCB1cmw9dXJsLCBoZWFkZXJzPWhlYWRlcnMpCiAKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgc3RhdHVzX2NvZGU9Tm9uZSwgdGV4dD1Ob25lLCB1cmw9Tm9u
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXR1c19jb2RlPU5vbmUsIHRleHQ9Tm9uZSwg
dXJsPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CiAgICAgICAgIGlmIHN0YXR1c19jb2RlIGlzIG5vdCBO
b25lOgogICAgICAgICAgICAgc2VsZi5zdGF0dXNfY29kZSA9IHN0YXR1c19jb2RlCiAgICAgICAg
IGVsaWYgdGV4dCBpcyBub3QgTm9uZToKQEAgLTQ3LDYgKzU1LDEyIEBAIGNsYXNzIFJlc3BvbnNl
KG9iamVjdCk6CiAgICAgICAgICAgICBzZWxmLnN0YXR1c19jb2RlID0gMjA0ICAjIE5vIGNvbnRl
bnQKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICBzZWxmLnVybCA9IHVybAorICAg
ICAgICBzZWxmLmhlYWRlcnMgPSBoZWFkZXJzIG9yIHt9CisKKyAgICAgICAgaWYgJ0NvbnRlbnQt
VHlwZScgbm90IGluIHNlbGYuaGVhZGVyczoKKyAgICAgICAgICAgIHNlbGYuaGVhZGVyc1snQ29u
dGVudC1UeXBlJ10gPSAndGV4dCcKKyAgICAgICAgaWYgJ0NvbnRlbnQtTGVuZ3RoJyBub3QgaW4g
c2VsZi5oZWFkZXJzOgorICAgICAgICAgICAgc2VsZi5oZWFkZXJzWydDb250ZW50LUxlbmd0aCdd
ID0gbGVuKHNlbGYudGV4dCkgaWYgc2VsZi50ZXh0IGVsc2UgMAogCiAgICAgZGVmIGpzb24oc2Vs
Zik6CiAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHNlbGYudGV4dCkKQEAgLTU1LDggKzY5LDYx
IEBAIGNsYXNzIFJlc3BvbnNlKG9iamVjdCk6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxl
bihzZWxmLnRleHQpLCBjaHVua19zaXplKToKICAgICAgICAgICAgIHlpZWxkIHNlbGYudGV4dFtp
OmkgKyBjaHVua19zaXplXQogCisgICAgZGVmIGl0ZXJfbGluZXMoc2VsZik6CisgICAgICAgIGZv
ciBsaW5lIGluIHNlbGYudGV4dC5zcGxpdGxpbmVzKCkgaWYgc2VsZi50ZXh0IGVsc2UgW106Cisg
ICAgICAgICAgICB5aWVsZCBzdHJpbmdfdXRpbHMuZW5jb2RlKGxpbmUpCisKICAgICBkZWYgX19l
bnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fZXhpdF9fKHNl
bGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHBhc3MKKworCitjbGFzcyBSZXF1ZXN0cyhD
b250ZXh0U3RhY2spOgorICAgIHRvcCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAq
aG9zdHMpOgorICAgICAgICBzdXBlcihSZXF1ZXN0cywgc2VsZikuX19pbml0X18oY2xzPVJlcXVl
c3RzKQorICAgICAgICBzZWxmLmhvc3RzID0gaG9zdHMKKyAgICAgICAgc2VsZi5fdGVtcF9wYXRj
aGVzID0gTm9uZQorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsICoqa3dhcmdz
KToKKyAgICAgICAgcmV0dXJuIFJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICBkZWYgX19l
bnRlcl9fKHNlbGYpOgorICAgICAgICAjIEFsbG93IHJlcXVlc3RzIGFuZCBtb2NrIHRvIGJlIG1h
bmFnZWQgdmlhIGF1dG9pbnN0YWxsCisgICAgICAgIGltcG9ydCByZXF1ZXN0cworICAgICAgICBm
cm9tIG1vY2sgaW1wb3J0IHBhdGNoCisKKyAgICAgICAgdGhpcyA9IHNlbGYKKworICAgICAgICBj
bGFzcyBTZXNzaW9uKHJlcXVlc3RzLlNlc3Npb24pOgorICAgICAgICAgICAgZGVmIHJlcXVlc3Qo
c2VsZiwgbWV0aG9kLCB1cmwsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBmb3IgaG9zdCBp
biB0aGlzLmhvc3RzOgorICAgICAgICAgICAgICAgICAgICBmb3IgY2FuZGlkYXRlIGluIFsnaHR0
cHM6Ly97fScuZm9ybWF0KGhvc3QpLCAnaHR0cDovL3t9Jy5mb3JtYXQoaG9zdCldOgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgdXJsID09IGNhbmRpZGF0ZToKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCAqKmt3YXJncykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHVybC5zdGFydHN3aXRoKCd7fS8nLmZvcm1hdChjYW5k
aWRhdGUpKSBvciB1cmwuc3RhcnRzd2l0aCgne30/Jy5mb3JtYXQoY2FuZGlkYXRlKSk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXRob2QsIHVybCwg
Kiprd2FyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFNlc3Npb24sIHNlbGYpLnJl
cXVlc3QobWV0aG9kLCB1cmwsICoqa3dhcmdzKQorCisgICAgICAgIHNlbGYuX3RlbXBfcGF0Y2hl
cyA9IFsKKyAgICAgICAgICAgIHBhdGNoKCdyZXF1ZXN0cy5TZXNzaW9uJywgbmV3PVNlc3Npb24p
LAorICAgICAgICAgICAgcGF0Y2goJ3JlcXVlc3RzLnJlcXVlc3QnLCBuZXc9bGFtYmRhICphcmdz
LCAqKmt3YXJnczogU2Vzc2lvbigpLnJlcXVlc3QoKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAg
ICAgICBwYXRjaCgncmVxdWVzdHMuZ2V0JywgbmV3PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFNl
c3Npb24oKS5yZXF1ZXN0KCdHRVQnLCAqYXJncywgKiprd2FyZ3MpKSwKKyAgICAgICAgICAgIHBh
dGNoKCdyZXF1ZXN0cy5oZWFkJywgbmV3PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFNlc3Npb24o
KS5yZXF1ZXN0KCdIRUFEJywgKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAgICAgICBwYXRjaCgn
cmVxdWVzdHMucG9zdCcsIG5ldz1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBTZXNzaW9uKCkucmVx
dWVzdCgnUE9TVCcsICphcmdzLCAqKmt3YXJncykpLAorICAgICAgICAgICAgcGF0Y2goJ3JlcXVl
c3RzLnB1dCcsIG5ldz1sYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBTZXNzaW9uKCkucmVxdWVzdCgn
UFVUJywgKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMucGF0
Y2gnLCBuZXc9bGFtYmRhICphcmdzLCAqKmt3YXJnczogU2Vzc2lvbigpLnJlcXVlc3QoJ1BBVENI
JywgKmFyZ3MsICoqa3dhcmdzKSksCisgICAgICAgICAgICBwYXRjaCgncmVxdWVzdHMuZGVsZXRl
JywgbmV3PWxhbWJkYSAqYXJncywgKiprd2FyZ3M6IFNlc3Npb24oKS5yZXF1ZXN0KCdERUxFVEUn
LCAqYXJncywgKiprd2FyZ3MpKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcGF0Y2ggaW4gc2Vs
Zi5fdGVtcF9wYXRjaGVzOgorICAgICAgICAgICAgcGF0Y2guX19lbnRlcl9fKCkKKyAgICAgICAg
cmV0dXJuIHN1cGVyKFJlcXVlc3RzLCBzZWxmKS5fX2VudGVyX18oKQorCisgICAgZGVmIF9fZXhp
dF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFJlcXVlc3RzLCBzZWxm
KS5fX2V4aXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGZvciBwYXRjaCBpbiByZXZlcnNl
ZChzZWxmLl90ZW1wX3BhdGNoZXMpOgorICAgICAgICAgICAgcGF0Y2guX19leGl0X18oKmFyZ3Ms
ICoqa3dhcmdzKQorICAgICAgICBzZWxmLl90ZW1wX3BhdGNoZXMgPSBOb25lCkluZGV4OiBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL21vY2tz
L3JlcXVlc3RzX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvbW9ja3MvcmVxdWVzdHNfdW5pdHRl
c3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS90ZXN0cy9tb2Nrcy9yZXF1ZXN0c191bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCByZXF1ZXN0cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29y
ZXB5IGltcG9ydCBtb2NrcworCisKK2NsYXNzIE1vY2tSZXF1ZXN0cyh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CisKKyAgICBjbGFzcyBFeGFtcGxlKG1vY2tzLlJlcXVlc3RzKToKKyAgICAgICAgZGVmIHJl
cXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGlmIHVybCBp
biBbJ2h0dHBzOi8ve30vdGV4dCcuZm9ybWF0KGhvc3QpIGZvciBob3N0IGluIHNlbGYuaG9zdHNd
OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tVGV4dChkYXRhPSd0
ZXh0IGNvbnRlbnQnLCB1cmw9dXJsKQorICAgICAgICAgICAgaWYgdXJsIGluIFsnaHR0cHM6Ly97
fS9qc29uJy5mb3JtYXQoaG9zdCkgZm9yIGhvc3QgaW4gc2VsZi5ob3N0c106CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21Kc29uKGRhdGE9ZGljdChjb250ZW50PSdq
c29uJyksIHVybD11cmwpCisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRl
NDA0KHVybCkKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LlJlcXVlc3RzKCd3ZWJraXQub3JnJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJl
cXVlc3RzLmdldCgnaHR0cHM6Ly93ZWJraXQub3JnJykuc3RhdHVzX2NvZGUsIDQwNCkKKworICAg
IGRlZiB0ZXN0X2ZhbGxiYWNrKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLlJlcXVlc3RzKCd3
ZWJraXQub3JnJyk6CisgICAgICAgICAgICB3aXRoIG1vY2tzLlJlcXVlc3RzKCdidWdzLndlYmtp
dC5vcmcnKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcXVlc3RzLmdldCgn
aHR0cHM6Ly93ZWJraXQub3JnJykuc3RhdHVzX2NvZGUsIDQwNCkKKworICAgIGRlZiB0ZXN0X3Rl
eHQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5FeGFtcGxlKCd3ZWJraXQub3JnJyk6CisgICAg
ICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCgnaHR0cHM6Ly93ZWJraXQub3JnL3RleHQn
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS5zdGF0dXNfY29kZSwgMjAw
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwb25zZS50ZXh0LCAndGV4dCBjb250
ZW50JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHJlc3BvbnNlLmhlYWRlcnMs
IHsnQ29udGVudC1MZW5ndGgnOiAxMiwgJ0NvbnRlbnQtVHlwZSc6ICd0ZXh0J30pCisKKyAgICBk
ZWYgdGVzdF9qc29uKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuRXhhbXBsZSgnd2Via2l0Lm9y
ZycpOgorICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQoJ2h0dHBzOi8vd2Via2l0
Lm9yZy9qc29uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVz
X2NvZGUsIDIwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHJlc3BvbnNlLmpz
b24oKSwgZGljdChjb250ZW50PSdqc29uJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RF
cXVhbChyZXNwb25zZS5oZWFkZXJzLCB7J0NvbnRlbnQtTGVuZ3RoJzogMTksICdDb250ZW50LVR5
cGUnOiAndGV4dC9qc29uJ30pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>