<?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>65818</bug_id>
          
          <creation_ts>2011-08-06 13:28:24 -0700</creation_ts>
          <short_desc>Remove dead code in webkitpy</short_desc>
          <delta_ts>2011-08-06 15:19:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>koz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>447654</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-06 13:28:24 -0700</bug_when>
    <thetext>Remove dead code in webkitpy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447656</commentid>
    <comment_count>1</comment_count>
      <attachid>103163</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-06 13:30:07 -0700</bug_when>
    <thetext>Created attachment 103163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447669</commentid>
    <comment_count>2</comment_count>
      <attachid>103163</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-06 15:19:42 -0700</bug_when>
    <thetext>Comment on attachment 103163
Patch

Clearing flags on attachment: 103163

Committed r92563: &lt;http://trac.webkit.org/changeset/92563&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447670</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-06 15:19:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103163</attachid>
            <date>2011-08-06 13:30:07 -0700</date>
            <delta_ts>2011-08-06 15:19:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65818-20110806133006.patch</filename>
            <type>text/plain</type>
            <size>41510</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDkyNTU2KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjggQEAKKzIwMTEtMDgtMDYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZW1vdmUgZGVhZCBjb2RlIGluIHdlYmtpdHB5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTgxOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY29kZSB3YXMgYWRkZWQgdG8gc3VwcG9y
dCB0aGUgcmViYXNlbGluZTIgY29tbWFuZCBzaXggbW9udGhzIGFnbywKKyAgICAgICAgYnV0IHRo
ZSByZWJhc2VsaW5lMiBjb21tYW5kIHdhcyBuZXZlciBmaW5pc2hlZCBhbmQgbm8gb25lIGVsc2Ug
aGFzIHVzZWQKKyAgICAgICAgdGhpcyBjb2RlIHNpbmNlIGl0IHdhcyBsYW5kZWQuICBUaGlzIHBh
dGNoIHJlbW92ZXMgdGhlIGRlYWQgY29kZS4gIElmCisgICAgICAgIHdlIHJldml2ZSByZWJhc2Vs
aW5lMiwgdGhlbiB3ZSBjYW4gcmV2ZXJ0IHRoaXMgcGF0Y2ggYW5kIHJlY292ZXIgdGhlCisgICAg
ICAgIGNvZGUuICBVbnRpbCB0aGVuLCB0aGlzIGNvZGUgaXMganVzdCBkZWFkIHdlaWdodC4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5w
eToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRi
b3RfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Rl
c3RvdXRwdXQucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
bmV0L3Rlc3RvdXRwdXRfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vbmV0L3Rlc3RvdXRwdXRzZXQucHk6IFJlbW92ZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Rlc3RvdXRwdXRzZXRfdW5pdHRlc3QucHk6IFJl
bW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2RpcmVjdG9y
eWZpbGVzZXQucHk6IFJlbW92ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24v
c3lzdGVtL2RpcmVjdG9yeWZpbGVzZXRfdW5pdHRlc3QucHk6IFJlbW92ZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvY2hyb21pdW0ucHk6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJraXQucHk6CisKIDIwMTEtMDgt
MDUgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBG
aXggdW5pdCB0ZXN0IGJyZWFrYWdlIGJ5IHBsdW1iaW5nIGNvbnZlcnRfNDA0X3RvX05vbmUgaW4g
TW9ja1dlYi4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC90ZXN0b3V0
cHV0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC90
ZXN0b3V0cHV0LnB5CShyZXZpc2lvbiA5MjU1MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL25ldC90ZXN0b3V0cHV0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE3OSArMCwwIEBA
Ci0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJl
IG1ldDoKLSMKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSMgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0jIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LWltcG9ydCBvcwotaW1wb3J0IHJlCi0KLQotY2xhc3MgTmFpdmVJbWFnZURpZmZlcihvYmplY3Qp
OgotICAgIGRlZiBzYW1lX2ltYWdlKHNlbGYsIGltZzEsIGltZzIpOgotICAgICAgICByZXR1cm4g
aW1nMSA9PSBpbWcyCi0KLQotY2xhc3MgVGVzdE91dHB1dChvYmplY3QpOgotICAgICIiIlJlcHJl
c2VudHMgdGhlIG91dHB1dCB0aGF0IGEgc2luZ2xlIGxheW91dCB0ZXN0IGdlbmVyYXRlcyB3aGVu
IGl0IGlzIHJ1bgotICAgIG9uIGEgcGFydGljdWxhciBwbGF0Zm9ybS4KLSAgICBOb3RlIHRoYXQg
dGhpcyBpcyB0aGUgcmF3IG91dHB1dCB0aGF0IGlzIHByb2R1Y2VkIHdoZW4gdGhlIGxheW91dCB0
ZXN0IGlzCi0gICAgcnVuLCBub3QgdGhlIHJlc3VsdHMgb2YgdGhlIHN1YnNlcXVlbnQgY29tcGFy
aXNvbiBiZXR3ZWVuIHRoYXQgb3V0cHV0IGFuZAotICAgIHRoZSBleHBlY3RlZCBvdXRwdXQuIiIi
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtLCBvdXRwdXRfdHlwZSwgZmlsZXMpOgot
ICAgICAgICBzZWxmLl9vdXRwdXRfdHlwZSA9IG91dHB1dF90eXBlCi0gICAgICAgIHNlbGYuX2Zp
bGVzID0gZmlsZXMKLSAgICAgICAgZmlsZSA9IGZpbGVzWzBdICAjIFBpY2sgc29tZSBmaWxlIHRv
IGRvIHRlc3QgbmFtZSBjYWxjdWxhdGlvbi4KLSAgICAgICAgc2VsZi5fbmFtZSA9IHNlbGYuX2V4
dHJhY3RfdGVzdF9uYW1lKGZpbGUubmFtZSgpKQotICAgICAgICBzZWxmLl9pc19hY3R1YWwgPSAn
LWFjdHVhbC4nIGluIGZpbGUubmFtZSgpCi0KLSAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0
Zm9ybSBvciBzZWxmLl9leHRyYWN0X3BsYXRmb3JtKGZpbGUubmFtZSgpKQotCi0gICAgZGVmIF9l
eHRyYWN0X3BsYXRmb3JtKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgIiIiQ2FsY3VsYXRlcyB0
aGUgcGxhdGZvcm0gZnJvbSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpZiBpdCBpc24ndCBrbm93biBh
bHJlYWR5IiIiCi0gICAgICAgIHBhdGggPSBmaWxlbmFtZS5zcGxpdChvcy5wYXRoLnNlcCkKLSAg
ICAgICAgaWYgJ3BsYXRmb3JtJyBpbiBwYXRoOgotICAgICAgICAgICAgcmV0dXJuIHBhdGhbcGF0
aC5pbmRleCgncGxhdGZvcm0nKSArIDFdCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYg
X2V4dHJhY3RfdGVzdF9uYW1lKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgcGF0aCA9IGZpbGVu
YW1lLnNwbGl0KG9zLnBhdGguc2VwKQotICAgICAgICBpZiAnTGF5b3V0VGVzdHMnIGluIHBhdGg6
Ci0gICAgICAgICAgICBwYXRoID0gcGF0aFsxICsgcGF0aC5pbmRleCgnTGF5b3V0VGVzdHMnKTpd
Ci0gICAgICAgIGlmICdsYXlvdXQtdGVzdC1yZXN1bHRzJyBpbiBwYXRoOgotICAgICAgICAgICAg
cGF0aCA9IHBhdGhbMSArIHBhdGguaW5kZXgoJ2xheW91dC10ZXN0LXJlc3VsdHMnKTpdCi0gICAg
ICAgIGlmICdwbGF0Zm9ybScgaW4gcGF0aDoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoWzIgKyBw
YXRoLmluZGV4KCdwbGF0Zm9ybScpOl0KLQotICAgICAgICBmaWxlbmFtZSA9IHBhdGhbLTFdCi0g
ICAgICAgIGZpbGVuYW1lID0gcmUuc3ViKCctZXhwZWN0ZWRcLi4qJCcsICcnLCBmaWxlbmFtZSkK
LSAgICAgICAgZmlsZW5hbWUgPSByZS5zdWIoJy1hY3R1YWxcLi4qJCcsICcnLCBmaWxlbmFtZSkK
LSAgICAgICAgcGF0aFstMV0gPSBmaWxlbmFtZQotICAgICAgICByZXR1cm4gb3MucGF0aC5zZXAu
am9pbihwYXRoKQotCi0gICAgZGVmIHNhdmVfdG8oc2VsZiwgcGF0aCk6Ci0gICAgICAgICIiIkhh
dmUgdGhlIGZpbGVzIGluIHRoaXMgVGVzdE91dHB1dCB3cml0ZSB0aGVtc2VsdmVzIHRvIHRoZSBk
aXNrIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uIiIiCi0gICAgICAgIGZvciBmaWxlIGluIHNl
bGYuX2ZpbGVzOgotICAgICAgICAgICAgZmlsZS5zYXZlX3RvKHBhdGgpCi0KLSAgICBkZWYgaXNf
YWN0dWFsKHNlbGYpOgotICAgICAgICAiIiJJcyB0aGlzIG91dHB1dCB0aGUgYWN0dWFsIG91dHB1
dCBvZiBhIHRlc3Q/IChBcyBvcHBvc2VkIHRvIGV4cGVjdGVkIG91dHB1dC4pIiIiCi0gICAgICAg
IHJldHVybiBzZWxmLl9pc19hY3R1YWwKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICAi
IiJUaGUgbmFtZSBvZiB0aGlzIHRlc3QgKGRvZXNuJ3QgaW5jbHVkZSBleHRlbnNpb24pIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9uYW1lCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToK
LSAgICAgICAgcmV0dXJuIChvdGhlciAhPSBOb25lIGFuZAotICAgICAgICAgICAgICAgIHNlbGYu
bmFtZSgpID09IG90aGVyLm5hbWUoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLnR5cGUoKSA9
PSBvdGhlci50eXBlKCkgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybSgpID09IG90
aGVyLnBsYXRmb3JtKCkgYW5kCi0gICAgICAgICAgICAgICAgc2VsZi5pc19hY3R1YWwoKSA9PSBv
dGhlci5pc19hY3R1YWwoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLnNhbWVfY29udGVudChv
dGhlcikpCi0KLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKHN0
cihzZWxmLm5hbWUoKSkgKyBzdHIoc2VsZi50eXBlKCkpICsgc3RyKHNlbGYucGxhdGZvcm0oKSkp
Ci0KLSAgICBkZWYgaXNfbmV3X2Jhc2VsaW5lX2ZvcihzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJl
dHVybiAoc2VsZi5uYW1lKCkgPT0gb3RoZXIubmFtZSgpIGFuZAotICAgICAgICAgICAgICAgIHNl
bGYudHlwZSgpID09IG90aGVyLnR5cGUoKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLnBsYXRm
b3JtKCkgPT0gb3RoZXIucGxhdGZvcm0oKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLmlzX2Fj
dHVhbCgpIGFuZAotICAgICAgICAgICAgICAgIChub3Qgb3RoZXIuaXNfYWN0dWFsKCkpKQotCi0g
ICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIGFjdHVhbF9zdHIgPSAnW0FdICcgaWYgc2Vs
Zi5pc19hY3R1YWwoKSBlbHNlICcnCi0gICAgICAgIHJldHVybiAiVGVzdE91dHB1dFslcy8lc10g
JXMlcyIgJSAoc2VsZi5fcGxhdGZvcm0sIHNlbGYuX291dHB1dF90eXBlLCBhY3R1YWxfc3RyLCBz
ZWxmLm5hbWUoKSkKLQotICAgIGRlZiB0eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5f
b3V0cHV0X3R5cGUKLQotICAgIGRlZiBwbGF0Zm9ybShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3BsYXRmb3JtCi0KLSAgICBkZWYgX3BhdGhfdG9fcGxhdGZvcm0oc2VsZik6Ci0gICAgICAg
ICIiIlJldHVybnMgdGhlIHBhdGggdGhhdCB0ZXN0cyBmb3IgdGhpcyBwbGF0Zm9ybSBhcmUgc3Rv
cmVkIGluLiIiIgotICAgICAgICBpZiBzZWxmLl9wbGF0Zm9ybSBpcyBOb25lOgotICAgICAgICAg
ICAgcmV0dXJuICIiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5q
b2luKCJzZWxmLl9wbGF0Zm9ybSIsIHNlbGYuX3BsYXRmb3JtKQotCi0gICAgZGVmIF9zYXZlX2V4
cGVjdGVkX3Jlc3VsdChzZWxmLCBmaWxlLCBwYXRoKToKLSAgICAgICAgcGF0aCA9IG9zLnBhdGgu
am9pbihwYXRoLCBzZWxmLl9wYXRoX3RvX3BsYXRmb3JtKCkpCi0gICAgICAgIGV4dGVuc2lvbiA9
IG9zLnBhdGguc3BsaXRleHQoZmlsZS5uYW1lKCkpWzFdCi0gICAgICAgIGZpbGVuYW1lID0gc2Vs
Zi5uYW1lKCkgKyAnLWV4cGVjdGVkJyArIGV4dGVuc2lvbgotICAgICAgICBmaWxlLnNhdmVfdG8o
cGF0aCwgZmlsZW5hbWUpCi0KLSAgICBkZWYgc2F2ZV9leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHBh
dGhfdG9fbGF5b3V0X3Rlc3RzKToKLSAgICAgICAgIiIiU2F2ZSB0aGUgZmlsZXMgb2YgdGhpcyBU
ZXN0T3V0cHV0IHRvIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3RvcnkKLSAgICAgICAgaW5zaWRlIHRo
ZSBMYXlvdXRUZXN0cyBkaXJlY3RvcnkuIFR5cGljYWxseSB0aGlzIG1lYW5zIHRoYXQgdGhlc2Ug
ZmlsZXMKLSAgICAgICAgd2lsbCBiZSBzYXZlZCBpbiAiTGF5b3V0VGVzdHMvcGxhdGZvcm0vPHBs
YXRmb3JtPi8sIG9yIHNpbXBseQotICAgICAgICBMYXlvdXRUZXN0cyBpZiB0aGUgcGxhdGZvcm0g
aXMgTm9uZS4iIiIKLSAgICAgICAgZm9yIGZpbGUgaW4gc2VsZi5fZmlsZXM6Ci0gICAgICAgICAg
ICBzZWxmLl9zYXZlX2V4cGVjdGVkX3Jlc3VsdChmaWxlLCBwYXRoX3RvX2xheW91dF90ZXN0cykK
LQotICAgIGRlZiBkZWxldGUoc2VsZik6Ci0gICAgICAgICIiIkRlbGV0ZXMgdGhlIGZpbGVzIHRo
YXQgY29tcHJpc2UgdGhpcyBUZXN0T3V0cHV0IGZyb20gZGlzay4gVGhpcwotICAgICAgICBmYWls
cyBpZiB0aGUgZmlsZXMgYXJlIHZpcnR1YWwgZmlsZXMgKGVnOiB0aGUgZmlsZXMgbWF5IHJlc2lk
ZSBpbnNpZGUgYQotICAgICAgICByZW1vdGUgemlwIGZpbGUpLiIiIgotICAgICAgICBmb3IgZmls
ZSBpbiBzZWxmLl9maWxlczoKLSAgICAgICAgICAgIGZpbGUuZGVsZXRlKCkKLQotCi1jbGFzcyBU
ZXh0VGVzdE91dHB1dChUZXN0T3V0cHV0KToKLSAgICAiIiJSZXByZXNlbnRzIGEgdGV4dCBvdXRw
dXQgb2YgYSBzaW5nbGUgdGVzdCBvbiBhIHNpbmdsZSBwbGF0Zm9ybSIiIgotICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwbGF0Zm9ybSwgdGV4dF9maWxlKToKLSAgICAgICAgc2VsZi5fdGV4dF9maWxl
ID0gdGV4dF9maWxlCi0gICAgICAgIFRlc3RPdXRwdXQuX19pbml0X18oc2VsZiwgcGxhdGZvcm0s
ICd0ZXh0JywgW3RleHRfZmlsZV0pCi0KLSAgICBkZWYgc2FtZV9jb250ZW50KHNlbGYsIG90aGVy
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RleHRfZmlsZS5jb250ZW50cygpID09IG90aGVyLl90
ZXh0X2ZpbGUuY29udGVudHMoKQotCi0gICAgZGVmIHJldGFyZ2V0KHNlbGYsIHBsYXRmb3JtKToK
LSAgICAgICAgcmV0dXJuIFRleHRUZXN0T3V0cHV0KHBsYXRmb3JtLCBzZWxmLl90ZXh0X2ZpbGUp
Ci0KLQotY2xhc3MgSW1hZ2VUZXN0T3V0cHV0KFRlc3RPdXRwdXQpOgotICAgIGltYWdlX2RpZmZl
ciA9IE5haXZlSW1hZ2VEaWZmZXIoKQotICAgICIiIlJlcHJlc2VudHMgYW4gaW1hZ2Ugb3V0cHV0
IG9mIGEgc2luZ2xlIHRlc3Qgb24gYSBzaW5nbGUgcGxhdGZvcm0iIiIKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgcGxhdGZvcm0sIGltYWdlX2ZpbGUsIGNoZWNrc3VtX2ZpbGUpOgotICAgICAgICBz
ZWxmLl9jaGVja3N1bV9maWxlID0gY2hlY2tzdW1fZmlsZQotICAgICAgICBzZWxmLl9pbWFnZV9m
aWxlID0gaW1hZ2VfZmlsZQotICAgICAgICBmaWxlcyA9IGZpbHRlcihib29sLCBbc2VsZi5fY2hl
Y2tzdW1fZmlsZSwgc2VsZi5faW1hZ2VfZmlsZV0pCi0gICAgICAgIFRlc3RPdXRwdXQuX19pbml0
X18oc2VsZiwgcGxhdGZvcm0sICdpbWFnZScsIGZpbGVzKQotCi0gICAgZGVmIGhhc19jaGVja3N1
bShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrc3VtX2ZpbGUgaXMgbm90IE5vbmUK
LQotICAgIGRlZiBzYW1lX2NvbnRlbnQoc2VsZiwgb3RoZXIpOgotICAgICAgICAjIEZJWE1FIFRo
aXMgc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCBjaGVja3N1bXMgYXJlIHVwIHRvIGRhdGUuCi0gICAg
ICAgIGlmIHNlbGYuaGFzX2NoZWNrc3VtKCkgYW5kIG90aGVyLmhhc19jaGVja3N1bSgpOgotICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2NoZWNrc3VtX2ZpbGUuY29udGVudHMoKSA9PSBvdGhlci5f
Y2hlY2tzdW1fZmlsZS5jb250ZW50cygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxm
X2NvbnRlbnRzID0gc2VsZi5faW1hZ2VfZmlsZS5jb250ZW50cygpCi0gICAgICAgICAgICBvdGhl
cl9jb250ZW50cyA9IG90aGVyLl9pbWFnZV9maWxlLmNvbnRlbnRzKCkKLSAgICAgICAgICAgIHJl
dHVybiBJbWFnZVRlc3RPdXRwdXQuaW1hZ2VfZGlmZmVyLnNhbWVfaW1hZ2Uoc2VsZl9jb250ZW50
cywgb3RoZXJfY29udGVudHMpCi0KLSAgICBkZWYgcmV0YXJnZXQoc2VsZiwgcGxhdGZvcm0pOgot
ICAgICAgICByZXR1cm4gSW1hZ2VUZXN0T3V0cHV0KHBsYXRmb3JtLCBzZWxmLl9pbWFnZV9maWxl
LCBzZWxmLl9jaGVja3N1bV9maWxlKQotCi0gICAgZGVmIGNoZWNrc3VtKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5fY2hlY2tzdW1fZmlsZS5jb250ZW50cygpCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvdGVzdG91dHB1dF91bml0dGVzdC5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvdGVzdG91dHB1dF91bml0dGVz
dC5weQkocmV2aXNpb24gOTI1NTIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9u
ZXQvdGVzdG91dHB1dF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMSwxNDQgKzAsMCBA
QAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFy
ZSBtZXQ6Ci0jCi0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0jIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0jIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0jIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSMgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0jIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotIyBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN5cwotaW1wb3J0IHRlc3RvdXRwdXQKLWlt
cG9ydCB1bml0dGVzdAotCi0KLWNsYXNzIEZha2VGaWxlKG9iamVjdCk6Ci0gICAgZGVmIF9faW5p
dF9fKHNlbGYsIGZpbGVuYW1lLCBjb250ZW50cz0iZmFrZSBjb250ZW50cyIpOgotICAgICAgICBz
ZWxmLl9maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuX2NvbnRlbnRzID0gY29udGVu
dHMKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWUK
LQotICAgIGRlZiBjb250ZW50cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRz
Ci0KLQotY2xhc3MgRmFrZVRlc3RPdXRwdXQodGVzdG91dHB1dC5UZXN0T3V0cHV0KToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm0sIG91dHB1dF90eXBlLCBjb250ZW50cywgaXNfZXhw
ZWN0ZWQ9RmFsc2UpOgotICAgICAgICBzZWxmLl9vdXRwdXRfdHlwZSA9IG91dHB1dF90eXBlCi0g
ICAgICAgIHNlbGYuX2NvbnRlbnRzID0gY29udGVudHMKLSAgICAgICAgc2VsZi5faXNfZXhwZWN0
ZWQgPSBpc19leHBlY3RlZAotICAgICAgICBhY3R1YWwgPSAnYWN0dWFsJwotICAgICAgICBpZiBp
c19leHBlY3RlZDoKLSAgICAgICAgICAgIGFjdHVhbCA9ICdleHBlY3RlZCcKLSAgICAgICAgdGVz
dF9uYW1lID0gJ2Fub255bW91cy10ZXN0LSVzLnR4dCcgJSBhY3R1YWwKLSAgICAgICAgZmlsZSA9
IEZha2VGaWxlKHRlc3RfbmFtZSwgY29udGVudHMpCi0gICAgICAgIHN1cGVyKEZha2VUZXN0T3V0
cHV0LCBzZWxmKS5fX2luaXRfXyhwbGF0Zm9ybSwgb3V0cHV0X3R5cGUsIFtmaWxlXSkKLQotICAg
IGRlZiBjb250ZW50cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRlbnRzCi0KLSAg
ICBkZWYgcmV0YXJnZXQoc2VsZiwgcGxhdGZvcm0pOgotICAgICAgICByZXR1cm4gRmFrZVRlc3RP
dXRwdXQocGxhdGZvcm0sIHNlbGYuX291dHB1dF90eXBlLCBzZWxmLl9jb250ZW50cywgc2VsZi5f
aXNfZXhwZWN0ZWQpCi0KLQotY2xhc3MgVGVzdE91dHB1dFRlc3QodW5pdHRlc3QuVGVzdENhc2Up
OgotICAgIGRlZiBfY2hlY2tfbmFtZShzZWxmLCBmaWxlbmFtZSwgZXhwZWN0ZWRfdGVzdF9uYW1l
KToKLSAgICAgICAgIyBGSVhNRTogc2hvdWxkIGNvbnNpZGVyIHVzaW5nIE1vY2tGaWxlU3lzdGVt
IGhlcmUgc28gYXMgdG8gbm90Ci0gICAgICAgICMgaGF2ZSB0byB3b3JyeSBhYm91dCBwbGF0Zm9y
bS1zcGVjaWZpYyBwYXRoIHNlcGFyYXRvcnMuCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAn
d2luMzInOgotICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCcvJywgb3Mu
cGF0aC5zZXApCi0gICAgICAgICAgICBleHBlY3RlZF90ZXN0X25hbWUgPSBleHBlY3RlZF90ZXN0
X25hbWUucmVwbGFjZSgnLycsIG9zLnBhdGguc2VwKQotICAgICAgICByID0gdGVzdG91dHB1dC5U
ZXh0VGVzdE91dHB1dChOb25lLCBGYWtlRmlsZShmaWxlbmFtZSkpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKGV4cGVjdGVkX3Rlc3RfbmFtZSwgci5uYW1lKCkpCi0KLSAgICBkZWYgX2NoZWNr
X3BsYXRmb3JtKHNlbGYsIGZpbGVuYW1lLCBleHBlY3RlZF9wbGF0Zm9ybSk6Ci0gICAgICAgICMg
RklYTUU6IHNob3VsZCBjb25zaWRlciB1c2luZyBNb2NrRmlsZVN5c3RlbSBoZXJlIHNvIGFzIHRv
IG5vdAotICAgICAgICAjIGhhdmUgdG8gd29ycnkgYWJvdXQgcGxhdGZvcm0tc3BlY2lmaWMgcGF0
aCBzZXBhcmF0b3JzLgotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAg
ICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgnLycsIG9zLnBhdGguc2VwKQotICAg
ICAgICByID0gdGVzdG91dHB1dC5UZXh0VGVzdE91dHB1dChOb25lLCBGYWtlRmlsZShmaWxlbmFt
ZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkX3BsYXRmb3JtLCByLnBsYXRm
b3JtKCkpCi0KLSAgICBkZWYgdGVzdF9leHRyYWN0c19uYW1lX2NvcnJlY3RseShzZWxmKToKLSAg
ICAgICAgc2VsZi5fY2hlY2tfbmFtZSgnTGF5b3V0VGVzdHMvZmFzdC9kb20vYS1leHBlY3RlZC50
eHQnLCAnZmFzdC9kb20vYScpCi0gICAgICAgIHNlbGYuX2NoZWNrX25hbWUoJ0xheW91dFRlc3Rz
L2Zhc3QvZG9tL2EtYWN0dWFsLnR4dCcsICdmYXN0L2RvbS9hJykKLSAgICAgICAgc2VsZi5fY2hl
Y2tfbmFtZSgnTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL2Zhc3QvYS1leHBlY3RlZC50eHQnLCAn
ZmFzdC9hJykKLSAgICAgICAgc2VsZi5fY2hlY2tfbmFtZSgnTGF5b3V0VGVzdHMvcGxhdGZvcm0v
d2luL2Zhc3QvYS1leHBlY3RlZC5jaGVja3N1bScsICdmYXN0L2EnKQotICAgICAgICBzZWxmLl9j
aGVja19uYW1lKCdmYXN0L2RvbS90ZXN0LWV4cGVjdGVkLnR4dCcsICdmYXN0L2RvbS90ZXN0JykK
LSAgICAgICAgc2VsZi5fY2hlY2tfbmFtZSgnbGF5b3V0LXRlc3QtcmVzdWx0cy9mYXN0L2EtYWN0
dWFsLmNoZWNrc3VtJywgJ2Zhc3QvYScpCi0KLSAgICBkZWYgdGVzdF9leHRyYWN0c19wbGF0Zm9y
bV9jb3JyZWN0bHkoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NoZWNrX3BsYXRmb3JtKCdMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS93aW4vZmFzdC9hLWV4cGVjdGVkLnR4dCcsICd3aW4nKQotICAgICAgICBz
ZWxmLl9jaGVja19wbGF0Zm9ybSgncGxhdGZvcm0vd2luL2Zhc3QvYS1leHBlY3RlZC50eHQnLCAn
d2luJykKLSAgICAgICAgc2VsZi5fY2hlY2tfcGxhdGZvcm0oJ3BsYXRmb3JtL21hYy9mYXN0L2Et
ZXhwZWN0ZWQudHh0JywgJ21hYycpCi0gICAgICAgIHNlbGYuX2NoZWNrX3BsYXRmb3JtKCdmYXN0
L2EtZXhwZWN0ZWQudHh0JywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X291dHB1dHNfZnJvbV9hbl9h
Y3R1YWxfZmlsZV9hcmVfbWFya2VkX2FzX3N1Y2goc2VsZik6Ci0gICAgICAgIHIgPSB0ZXN0b3V0
cHV0LlRleHRUZXN0T3V0cHV0KE5vbmUsIEZha2VGaWxlKCd0ZXN0LWFjdHVhbC50eHQnKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuaXNfYWN0dWFsKCkpCi0KLSAgICBkZWYgdGVzdF9vdXRw
dXRzX2Zyb21fYW5fZXhwZWN0ZWRfZmlsZV9hcmVfbm90X2FjdHVhbChzZWxmKToKLSAgICAgICAg
ciA9IHRlc3RvdXRwdXQuVGV4dFRlc3RPdXRwdXQoTm9uZSwgRmFrZUZpbGUoJ3Rlc3QtZXhwZWN0
ZWQudHh0JykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoci5pc19hY3R1YWwoKSkKLQotICAg
IGRlZiB0ZXN0X2lzX25ld19iYXNlbGluZV9mb3Ioc2VsZik6Ci0gICAgICAgIGV4cGVjdGVkID0g
dGVzdG91dHB1dC5UZXh0VGVzdE91dHB1dCgnbWFjJywgRmFrZUZpbGUoJ3Rlc3QtZXhwZWN0ZWQu
dHh0JykpCi0gICAgICAgIGFjdHVhbCA9IHRlc3RvdXRwdXQuVGV4dFRlc3RPdXRwdXQoJ21hYycs
IEZha2VGaWxlKCd0ZXN0LWFjdHVhbC50eHQnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFj
dHVhbC5pc19uZXdfYmFzZWxpbmVfZm9yKGV4cGVjdGVkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShleHBlY3RlZC5pc19uZXdfYmFzZWxpbmVfZm9yKGFjdHVhbCkpCi0KLSAgICBkZWYgdGVz
dF9fZXFfXyhzZWxmKToKLSAgICAgICAgcjEgPSB0ZXN0b3V0cHV0LlRleHRUZXN0T3V0cHV0KCdt
YWMnLCBGYWtlRmlsZSgndGVzdC1leHBlY3RlZC50eHQnLCAnY29udGVudHMnKSkKLSAgICAgICAg
cjIgPSB0ZXN0b3V0cHV0LlRleHRUZXN0T3V0cHV0KCdtYWMnLCBGYWtlRmlsZSgndGVzdC1leHBl
Y3RlZC50eHQnLCAnY29udGVudHMnKSkKLSAgICAgICAgcjMgPSB0ZXN0b3V0cHV0LlRleHRUZXN0
T3V0cHV0KCd3aW4nLCBGYWtlRmlsZSgndGVzdC1leHBlY3RlZC50eHQnLCAnY29udGVudHMnKSkK
LQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyMSwgcjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWxzKHIxLCByMi5yZXRhcmdldCgnbWFjJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1
YWxzKHIxLCByMi5yZXRhcmdldCgnd2luJykpCi0KLSAgICBkZWYgdGVzdF9faGFzaF9fKHNlbGYp
OgotICAgICAgICByMSA9IHRlc3RvdXRwdXQuVGV4dFRlc3RPdXRwdXQoJ21hYycsIEZha2VGaWxl
KCd0ZXN0LWV4cGVjdGVkLnR4dCcsICdjb250ZW50cycpKQotICAgICAgICByMiA9IHRlc3RvdXRw
dXQuVGV4dFRlc3RPdXRwdXQoJ21hYycsIEZha2VGaWxlKCd0ZXN0LWV4cGVjdGVkLnR4dCcsICdj
b250ZW50cycpKQotICAgICAgICByMyA9IHRlc3RvdXRwdXQuVGV4dFRlc3RPdXRwdXQoTm9uZSwg
RmFrZUZpbGUoJ3Rlc3QtZXhwZWN0ZWQudHh0JywgTm9uZSkpCi0KLSAgICAgICAgeCA9IHNldChb
cjEsIHIyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwgbGVuKHNldChbcjEsIHIyXSkp
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyLCBsZW4oc2V0KFtyMSwgcjIsIHIzXSkpKQot
Ci0gICAgZGVmIHRlc3RfaW1hZ2VfZGlmZl9pc19pbnZva2VkX2Zvcl9pbWFnZV9vdXRwdXRzX3dp
dGhvdXRfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIHIxID0gdGVzdG91dHB1dC5JbWFnZVRlc3RP
dXRwdXQoJ21hYycsIEZha2VGaWxlKCd0ZXN0LWV4cGVjdGVkLnBuZycsICdhc2RmJyksIEZha2VG
aWxlKCd0ZXN0LWV4cGVjdGVkLmNoZWNrc3VtJywgJ2NoZWNrJykpCi0gICAgICAgIHIyID0gdGVz
dG91dHB1dC5JbWFnZVRlc3RPdXRwdXQoJ21hYycsIEZha2VGaWxlKCd0ZXN0LWV4cGVjdGVkLnBu
ZycsICdhc2RmJyksIE5vbmUpCi0KLSAgICAgICAgIyBEZWZhdWx0IGJlaGF2aW91ciBpcyB0byBq
dXN0IGNvbXBhcmUgb24gaW1hZ2UgY29udGVudHMuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShy
MS5zYW1lX2NvbnRlbnQocjIpKQotCi0gICAgICAgIGNsYXNzIEFsbEltYWdlc0FyZURpZmZlcmVu
dChvYmplY3QpOgotICAgICAgICAgICAgZGVmIHNhbWVfaW1hZ2Uoc2VsZiwgaW1hZ2UxLCBpbWFn
ZTIpOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICMgQnV0IHdlIGNh
biBpbnN0YWxsIG90aGVyIGltYWdlIGRpZmZlcnMuCi0gICAgICAgIHRlc3RvdXRwdXQuSW1hZ2VU
ZXN0T3V0cHV0LmltYWdlX2RpZmZlciA9IEFsbEltYWdlc0FyZURpZmZlcmVudCgpCi0KLSAgICAg
ICAgc2VsZi5hc3NlcnRGYWxzZShyMS5zYW1lX2NvbnRlbnQocjIpKQotCi1pZiBfX25hbWVfXyA9
PSAiX19tYWluX18iOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9jb21tb24vbmV0L3Rlc3RvdXRwdXRzZXQucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Rlc3RvdXRwdXRzZXQucHkJKHJldmlzaW9uIDky
NTUyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L3Rlc3RvdXRwdXRzZXQu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhv
bgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0jIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotIyBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotZnJvbSB3ZWJraXRweS5jb21tb24u
c3lzdGVtLmRpcmVjdG9yeWZpbGVzZXQgaW1wb3J0IERpcmVjdG9yeUZpbGVTZXQKLWZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS56aXBmaWxlc2V0IGltcG9ydCBaaXBGaWxlU2V0Ci1pbXBvcnQg
cmUKLWltcG9ydCB0ZXN0b3V0cHV0Ci1pbXBvcnQgdXJsbGliCi0KLQotY2xhc3MgVGVzdE91dHB1
dFNldChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwbGF0Zm9ybSwgemlw
X2ZpbGUsICoqa3dhcmdzKToKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLSAgICAgICAgc2Vs
Zi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQotICAgICAgICBzZWxmLl96aXBfZmlsZSA9IHppcF9maWxl
Ci0gICAgICAgIHNlbGYuX2luY2x1ZGVfZXhwZWN0ZWQgPSBrd2FyZ3MuZ2V0KCdpbmNsdWRlX2V4
cGVjdGVkJywgVHJ1ZSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmcm9tX3ppcF91cmwo
Y2xzLCBwbGF0Zm9ybSwgemlwX3BhdGgpOgotICAgICAgICByZXR1cm4gVGVzdE91dHB1dFNldCgn
bG9jYWwgemlwICVzIGJ1aWxkZXInICUgcGxhdGZvcm0sIHBsYXRmb3JtLCBaaXBGaWxlU2V0KHpp
cF9wYXRoKSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmcm9tX3ppcChjbHMsIHBsYXRm
b3JtLCB6aXApOgotICAgICAgICByZXR1cm4gVGVzdE91dHB1dFNldCgnbG9jYWwgemlwICVzIGJ1
aWxkZXInICUgcGxhdGZvcm0sIHBsYXRmb3JtLCB6aXApCi0KLSAgICBAY2xhc3NtZXRob2QKLSAg
ICBkZWYgZnJvbV96aXBfbWFwKGNscywgemlwX21hcCk6Ci0gICAgICAgIG91dHB1dF9zZXRzID0g
W10KLSAgICAgICAgZm9yIGssIHYgaW4gemlwX21hcC5pdGVtcygpOgotICAgICAgICAgICAgb3V0
cHV0X3NldHMuYXBwZW5kKFRlc3RPdXRwdXRTZXQuZnJvbV96aXAoaywgdikpCi0gICAgICAgIHJl
dHVybiBBZ2dyZWdhdGVUZXN0T3V0cHV0U2V0KG91dHB1dF9zZXRzKQotCi0gICAgQGNsYXNzbWV0
aG9kCi0gICAgZGVmIGZyb21fcGF0aChzZWxmLCBwYXRoLCBwbGF0Zm9ybT1Ob25lKToKLSAgICAg
ICAgcmV0dXJuIFRlc3RPdXRwdXRTZXQoJ2xvY2FsICVzIGJ1aWxkZXInICUgcGxhdGZvcm0sIHBs
YXRmb3JtLCBEaXJlY3RvcnlGaWxlU2V0KHBhdGgpKQotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLl9uYW1lCi0KLSAgICBkZWYgc2V0X3BsYXRmb3JtKHNlbGYsIHBs
YXRmb3JtKToKLSAgICAgICAgc2VsZi5fcGxhdGZvcm0gPSBwbGF0Zm9ybQotCi0gICAgZGVmIGZp
bGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gW3NlbGYuX3ppcF9maWxlLm9wZW4oZmlsZW5hbWUp
IGZvciBmaWxlbmFtZSBpbiBzZWxmLl96aXBfZmlsZS5uYW1lbGlzdCgpXQotCi0gICAgZGVmIF9l
eHRyYWN0X291dHB1dF9maWxlcyhzZWxmLCBuYW1lLCBleGFjdF9tYXRjaCk6Ci0gICAgICAgIG5h
bWVfbWF0Y2hlciA9IHJlLmNvbXBpbGUobmFtZSkKLSAgICAgICAgYWN0dWFsX21hdGNoZXIgPSBy
ZS5jb21waWxlKHInLWFjdHVhbFwuJykKLSAgICAgICAgZXhwZWN0ZWRfbWF0Y2hlciA9IHJlLmNv
bXBpbGUocictZXhwZWN0ZWRcLicpCi0KLSAgICAgICAgY2hlY2tzdW1fZmlsZXMgPSBbXQotICAg
ICAgICB0ZXh0X2ZpbGVzID0gW10KLSAgICAgICAgaW1hZ2VfZmlsZXMgPSBbXQotICAgICAgICBm
b3Igb3V0cHV0X2ZpbGUgaW4gc2VsZi5maWxlcygpOgotICAgICAgICAgICAgbmFtZV9tYXRjaCA9
IG5hbWVfbWF0Y2hlci5zZWFyY2gob3V0cHV0X2ZpbGUubmFtZSgpKQotICAgICAgICAgICAgYWN0
dWFsX21hdGNoID0gYWN0dWFsX21hdGNoZXIuc2VhcmNoKG91dHB1dF9maWxlLm5hbWUoKSkKLSAg
ICAgICAgICAgIGV4cGVjdGVkX21hdGNoID0gZXhwZWN0ZWRfbWF0Y2hlci5zZWFyY2gob3V0cHV0
X2ZpbGUubmFtZSgpKQotICAgICAgICAgICAgaWYgbm90IChuYW1lX21hdGNoIGFuZCAoYWN0dWFs
X21hdGNoIG9yIChzZWxmLl9pbmNsdWRlX2V4cGVjdGVkIGFuZCBleHBlY3RlZF9tYXRjaCkpKToK
LSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgb3V0cHV0X2ZpbGUubmFt
ZSgpLmVuZHN3aXRoKCcuY2hlY2tzdW0nKToKLSAgICAgICAgICAgICAgICBjaGVja3N1bV9maWxl
cy5hcHBlbmQob3V0cHV0X2ZpbGUpCi0gICAgICAgICAgICBlbGlmIG91dHB1dF9maWxlLm5hbWUo
KS5lbmRzd2l0aCgnLnR4dCcpOgotICAgICAgICAgICAgICAgIHRleHRfZmlsZXMuYXBwZW5kKG91
dHB1dF9maWxlKQotICAgICAgICAgICAgZWxpZiBvdXRwdXRfZmlsZS5uYW1lKCkuZW5kc3dpdGgo
Jy5wbmcnKToKLSAgICAgICAgICAgICAgICBpbWFnZV9maWxlcy5hcHBlbmQob3V0cHV0X2ZpbGUp
Ci0KLSAgICAgICAgcmV0dXJuIChjaGVja3N1bV9maWxlcywgdGV4dF9maWxlcywgaW1hZ2VfZmls
ZXMpCi0KLSAgICBkZWYgX2V4dHJhY3RfZmlsZV93aXRoX25hbWUoc2VsZiwgbmFtZSwgZmlsZXMp
OgotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZpbGUubmFtZSgp
ID09IG5hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGUKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgIGRlZiBfbWFrZV9vdXRwdXRfZnJvbV9pbWFnZShzZWxmLCBpbWFnZV9maWxlLCBj
aGVja3N1bV9maWxlcyk6Ci0gICAgICAgIGNoZWNrc3VtX2ZpbGVfbmFtZSA9IHJlLnN1YignXC5w
bmcnLCAnLmNoZWNrc3VtJywgaW1hZ2VfZmlsZS5uYW1lKCkpCi0gICAgICAgIGNoZWNrc3VtX2Zp
bGUgPSBzZWxmLl9leHRyYWN0X2ZpbGVfd2l0aF9uYW1lKGNoZWNrc3VtX2ZpbGVfbmFtZSwgY2hl
Y2tzdW1fZmlsZXMpCi0gICAgICAgIHJldHVybiB0ZXN0b3V0cHV0LkltYWdlVGVzdE91dHB1dChz
ZWxmLl9wbGF0Zm9ybSwgaW1hZ2VfZmlsZSwgY2hlY2tzdW1fZmlsZSkKLQotICAgIGRlZiBvdXRw
dXRzX2ZvcihzZWxmLCBuYW1lLCAqKmt3YXJncyk6Ci0gICAgICAgIHRhcmdldF90eXBlID0ga3dh
cmdzLmdldCgndGFyZ2V0X3R5cGUnLCBOb25lKQotICAgICAgICBleGFjdF9tYXRjaCA9IGt3YXJn
cy5nZXQoJ2V4YWN0X21hdGNoJywgRmFsc2UpCi0gICAgICAgIGlmIHJlLnNlYXJjaChyJ1wueD9o
dG1sJywgbmFtZSk6Ci0gICAgICAgICAgICBuYW1lID0gbmFtZVs6bmFtZS5yaW5kZXgoJy4nKV0K
LQotICAgICAgICAoY2hlY2tzdW1fZmlsZXMsIHRleHRfZmlsZXMsIGltYWdlX2ZpbGVzKSA9IHNl
bGYuX2V4dHJhY3Rfb3V0cHV0X2ZpbGVzKG5hbWUsIGV4YWN0X21hdGNoKQotCi0gICAgICAgIG91
dHB1dHMgPSBbc2VsZi5fbWFrZV9vdXRwdXRfZnJvbV9pbWFnZShpbWFnZV9maWxlLCBjaGVja3N1
bV9maWxlcykgZm9yIGltYWdlX2ZpbGUgaW4gaW1hZ2VfZmlsZXNdCi0KLSAgICAgICAgb3V0cHV0
cyArPSBbdGVzdG91dHB1dC5UZXh0VGVzdE91dHB1dChzZWxmLl9wbGF0Zm9ybSwgdGV4dF9maWxl
KSBmb3IgdGV4dF9maWxlIGluIHRleHRfZmlsZXNdCi0KLSAgICAgICAgaWYgZXhhY3RfbWF0Y2g6
Ci0gICAgICAgICAgICBvdXRwdXRzID0gZmlsdGVyKGxhbWJkYSBvdXRwdXQ6IG91dHB1dC5uYW1l
KCkgPT0gbmFtZSwgb3V0cHV0cykKLQotICAgICAgICBvdXRwdXRzID0gZmlsdGVyKGxhbWJkYSBy
OiB0YXJnZXRfdHlwZSBpbiBbTm9uZSwgci50eXBlKCldLCBvdXRwdXRzKQotCi0gICAgICAgIHJl
dHVybiBvdXRwdXRzCi0KLQotY2xhc3MgQWdncmVnYXRlVGVzdE91dHB1dFNldChvYmplY3QpOgot
ICAgICIiIlNldCBvZiB0ZXN0IG91dHB1dHMgZnJvbSBhIGxpc3Qgb2YgYnVpbGRlcnMiIiIKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwgYnVpbGRlcnMpOgotICAgICAgICBzZWxmLl9idWlsZGVycyA9
IGJ1aWxkZXJzCi0KLSAgICBkZWYgb3V0cHV0c19mb3Ioc2VsZiwgbmFtZSwgKiprd2FyZ3MpOgot
ICAgICAgICByZXR1cm4gc3VtKFtidWlsZGVyLm91dHB1dHNfZm9yKG5hbWUsICoqa3dhcmdzKSBm
b3IgYnVpbGRlciBpbiBzZWxmLl9idWlsZGVyc10sIFtdKQotCi0gICAgZGVmIGJ1aWxkZXJzKHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYnVpbGRlcnMKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL25ldC90ZXN0b3V0cHV0c2V0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL25ldC90ZXN0b3V0cHV0c2V0X3VuaXR0
ZXN0LnB5CShyZXZpc2lvbiA5MjU1MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9u
L25ldC90ZXN0b3V0cHV0c2V0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEzMiAr
MCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0jIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLWltcG9ydCBzeXMKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnppcF9tb2Nr
IGltcG9ydCBNb2NrWmlwCi1pbXBvcnQgdGVzdG91dHB1dHNldAotaW1wb3J0IHVuaXR0ZXN0Ci0K
LQotY2xhc3MgVGVzdE91dHB1dFNldFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBf
b3V0cHV0c2V0X3dpdGhfemlwKHNlbGYsIHppcCwgKiprd2FyZ3MpOgotICAgICAgICByZXR1cm4g
dGVzdG91dHB1dHNldC5UZXN0T3V0cHV0U2V0KCc8ZmFrZS1vdXRwdXRzZXQ+JywgJzxmYWtlLXBs
YXRmb3JtPicsIHppcCwgKiprd2FyZ3MpCi0KLSAgICBkZWYgdGVzdF90ZXh0X2ZpbGVzX2dldF9p
bnRlcnByZXRlZF9hc190ZXh0X291dHB1dHMoc2VsZik6Ci0gICAgICAgIHppcCA9IE1vY2taaXAo
KQotICAgICAgICB6aXAuaW5zZXJ0KCdmYXN0L2RvbS9zb21lLXRlc3QtYWN0dWFsLnR4dCcsICdh
Y3R1YWwgb3V0cHV0cycpCi0gICAgICAgIGIgPSBzZWxmLl9vdXRwdXRzZXRfd2l0aF96aXAoemlw
KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4oYi5vdXRwdXRzX2ZvcignZmFzdC9k
b20vc29tZS10ZXN0JykpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygnZmFzdC9kb20vc29t
ZS10ZXN0JywgYi5vdXRwdXRzX2ZvcignZmFzdC9kb20vc29tZS10ZXN0Lmh0bWwnKVswXS5uYW1l
KCkpCi0KLSAgICBkZWYgdGVzdF9pbWFnZV9hbmRfY2hlY2tzdW1fZmlsZXNfZ2V0X2ludGVycHJl
dGVkX2FzX2Ffc2luZ2xlX2ltYWdlX291dHB1dChzZWxmKToKLSAgICAgICAgemlwID0gTW9ja1pp
cCgpCi0gICAgICAgIHppcC5pbnNlcnQoJ2Zhc3QvZG9tL3NvbWUtdGVzdC1hY3R1YWwuY2hlY2tz
dW0nLCAnYWJjMTIzJykKLSAgICAgICAgemlwLmluc2VydCgnZmFzdC9kb20vc29tZS10ZXN0LWFj
dHVhbC5wbmcnLCAnPGltYWdlIGRhdGE+JykKLSAgICAgICAgYiA9IHNlbGYuX291dHB1dHNldF93
aXRoX3ppcCh6aXApCi0gICAgICAgIG91dHB1dHMgPSBiLm91dHB1dHNfZm9yKCdmYXN0L2RvbS9z
b21lLXRlc3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygxLCBsZW4ob3V0cHV0cykpCi0g
ICAgICAgIG91dHB1dCA9IG91dHB1dHNbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2lt
YWdlJywgb3V0cHV0LnR5cGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2FiYzEyMycs
IG91dHB1dC5jaGVja3N1bSgpKQotCi0gICAgZGVmIHRlc3RfbXVsdGlwbGVfaW1hZ2Vfb3V0cHV0
c19hcmVfZGV0ZWN0ZWQoc2VsZik6Ci0gICAgICAgIHppcCA9IE1vY2taaXAoKQotICAgICAgICB6
aXAuaW5zZXJ0KCdwbGF0Zm9ybS93aW4vZmFzdC9kb20vc29tZS10ZXN0LWFjdHVhbC5jaGVja3N1
bScsICdjaGVja3N1bTEnKQotICAgICAgICB6aXAuaW5zZXJ0KCdwbGF0Zm9ybS93aW4vZmFzdC9k
b20vc29tZS10ZXN0LWFjdHVhbC5wbmcnLCAnPGltYWdlIGRhdGEgMT4nKQotICAgICAgICB6aXAu
aW5zZXJ0KCdwbGF0Zm9ybS9tYWMvZmFzdC9kb20vc29tZS10ZXN0LWFjdHVhbC5jaGVja3N1bScs
ICdjaGVja3N1bTInKQotICAgICAgICB6aXAuaW5zZXJ0KCdwbGF0Zm9ybS9tYWMvZmFzdC9kb20v
c29tZS10ZXN0LWFjdHVhbC5wbmcnLCAnPGltYWdlIGRhdGEgMj4nKQotICAgICAgICBiID0gc2Vs
Zi5fb3V0cHV0c2V0X3dpdGhfemlwKHppcCkKLSAgICAgICAgb3V0cHV0cyA9IGIub3V0cHV0c19m
b3IoJ2Zhc3QvZG9tL3NvbWUtdGVzdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIsIGxl
bihvdXRwdXRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXRwdXRzWzBdLnNhbWVfY29u
dGVudChvdXRwdXRzWzFdKSkKLQotICAgIGRlZiB0ZXN0X2FnZ3JlZ2F0ZV9vdXRwdXRfc2V0X2Nv
cnJlY3RseV9yZXRyaWV2ZXNfdGVzdHNfZnJvbV9tdWx0aXBsZV9vdXRwdXRfc2V0cyhzZWxmKToK
LSAgICAgICAgb3V0cHV0c2V0MV96aXAgPSBNb2NrWmlwKCkKLSAgICAgICAgb3V0cHV0c2V0MV96
aXAuaW5zZXJ0KCdmYXN0L2RvbS90ZXN0LWFjdHVhbC50eHQnLCAnbGludXggdGV4dCBvdXRwdXQn
KQotICAgICAgICBvdXRwdXRzZXQxID0gdGVzdG91dHB1dHNldC5UZXN0T3V0cHV0U2V0KCdsaW51
eC1vdXRwdXRzZXQnLCAnbGludXgnLCBvdXRwdXRzZXQxX3ppcCkKLSAgICAgICAgb3V0cHV0c2V0
Ml96aXAgPSBNb2NrWmlwKCkKLSAgICAgICAgb3V0cHV0c2V0Ml96aXAuaW5zZXJ0KCdmYXN0L2Rv
bS90ZXN0LWFjdHVhbC50eHQnLCAnd2luZG93cyB0ZXh0IG91dHB1dCcpCi0gICAgICAgIG91dHB1
dHNldDIgPSB0ZXN0b3V0cHV0c2V0LlRlc3RPdXRwdXRTZXQoJ3dpbi1vdXRwdXRzZXQnLCAnd2lu
Jywgb3V0cHV0c2V0Ml96aXApCi0KLSAgICAgICAgYiA9IHRlc3RvdXRwdXRzZXQuQWdncmVnYXRl
VGVzdE91dHB1dFNldChbb3V0cHV0c2V0MSwgb3V0cHV0c2V0Ml0pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKDIsIGxlbihiLm91dHB1dHNfZm9yKCdmYXN0L2RvbS90ZXN0JykpKQotCi0gICAg
ZGVmIHRlc3RfY2FuX2luZmVyX3BsYXRmb3JtX2Zyb21fcGF0aF9pZl9ub25lX3Byb3ZpZGVkKHNl
bGYpOgotICAgICAgICAjIEZJWE1FOiB1bmNsZWFyIHdoYXQgdGhlIHJpZ2h0IGJlaGF2aW9yIG9u
IHdpbjMyIGlzLgotICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NDUyNS4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAg
ICAgICByZXR1cm4KLQotICAgICAgICB6aXAgPSBNb2NrWmlwKCkKLSAgICAgICAgemlwLmluc2Vy
dCgncGxhdGZvcm0vd2luL3NvbWUtdGVzdC1leHBlY3RlZC5wbmcnLCAnPGltYWdlIGRhdGE+JykK
LSAgICAgICAgemlwLmluc2VydCgncGxhdGZvcm0vd2luL3NvbWUtdGVzdC1leHBlY3RlZC5jaGVj
a3N1bScsICdhYmMxMjMnKQotICAgICAgICBiID0gdGVzdG91dHB1dHNldC5UZXN0T3V0cHV0U2V0
KCdsb2NhbCBMYXlvdXRUZXN0cyBvdXRwdXRzZXQnLCBOb25lLCB6aXApCi0KLSAgICAgICAgb3V0
cHV0cyA9IGIub3V0cHV0c19mb3IoJ3NvbWUtdGVzdCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWxzKDEsIGxlbihvdXRwdXRzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ3dpbicsIG91
dHB1dHNbMF0ucGxhdGZvcm0oKSkKLQotICAgIGRlZiB0ZXN0X3Rlc3RfZXh0ZW5zaW9uX2lzX2ln
bm9yZWQoc2VsZik6Ci0gICAgICAgIHppcCA9IE1vY2taaXAoKQotICAgICAgICB6aXAuaW5zZXJ0
KCd0ZXN0L3Rlc3QtYS1hY3R1YWwudHh0JywgJ2FjdHVhbCBvdXRwdXRzJykKLSAgICAgICAgYiA9
IHNlbGYuX291dHB1dHNldF93aXRoX3ppcCh6aXApCi0gICAgICAgIG91dHB1dHMgPSBiLm91dHB1
dHNfZm9yKCd0ZXN0L3Rlc3QtYS5odG1sJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMSwg
bGVuKG91dHB1dHMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygndGVzdC90ZXN0LWEnLCBv
dXRwdXRzWzBdLm5hbWUoKSkKLQotICAgIGRlZiB0ZXN0X2V4aXN0aW5nX291dHB1dHNfYXJlX21h
cmtlZF9hc19zdWNoKHNlbGYpOgotICAgICAgICB6aXAgPSBNb2NrWmlwKCkKLSAgICAgICAgemlw
Lmluc2VydCgndGVzdC90ZXN0LWEtZXhwZWN0ZWQudHh0JywgJ2V4cGVjdGVkIG91dHB1dHMnKQot
ICAgICAgICBiID0gc2VsZi5fb3V0cHV0c2V0X3dpdGhfemlwKHppcCkKLSAgICAgICAgb3V0cHV0
cyA9IGIub3V0cHV0c19mb3IoJ3Rlc3QvdGVzdC1hLmh0bWwnKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygxLCBsZW4ob3V0cHV0cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3V0cHV0
c1swXS5pc19hY3R1YWwoKSkKLQotICAgIGRlZiB0ZXN0X29ubHlfcmV0dXJuc19vdXRwdXRzX29m
X3NwZWNpZmllZF90eXBlKHNlbGYpOgotICAgICAgICB6aXAgPSBNb2NrWmlwKCkKLSAgICAgICAg
emlwLmluc2VydCgndGVzdC90ZXN0LWEtZXhwZWN0ZWQudHh0JywgJ2V4cGVjdGVkIG91dHB1dHMn
KQotICAgICAgICB6aXAuaW5zZXJ0KCd0ZXN0L3Rlc3QtYS1leHBlY3RlZC5jaGVja3N1bScsICdl
eHBlY3RlZCBvdXRwdXRzJykKLSAgICAgICAgemlwLmluc2VydCgndGVzdC90ZXN0LWEtZXhwZWN0
ZWQucG5nJywgJ2V4cGVjdGVkIG91dHB1dHMnKQotICAgICAgICBiID0gc2VsZi5fb3V0cHV0c2V0
X3dpdGhfemlwKHppcCkKLQotICAgICAgICBvdXRwdXRzID0gYi5vdXRwdXRzX2ZvcigndGVzdC90
ZXN0LWEuaHRtbCcpCi0gICAgICAgIHRleHRfb3V0cHV0cyA9IGIub3V0cHV0c19mb3IoJ3Rlc3Qv
dGVzdC1hLmh0bWwnLCB0YXJnZXRfdHlwZT0ndGV4dCcpCi0gICAgICAgIGltYWdlX291dHB1dHMg
PSBiLm91dHB1dHNfZm9yKCd0ZXN0L3Rlc3QtYS5odG1sJywgdGFyZ2V0X3R5cGU9J2ltYWdlJykK
LQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyLCBsZW4ob3V0cHV0cykpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKDEsIGxlbih0ZXh0X291dHB1dHMpKQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscygxLCBsZW4oaW1hZ2Vfb3V0cHV0cykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxz
KCd0ZXh0JywgdGV4dF9vdXRwdXRzWzBdLnR5cGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoJ2ltYWdlJywgaW1hZ2Vfb3V0cHV0c1swXS50eXBlKCkpCi0KLSAgICBkZWYgdGVzdF9leGNs
dWRlX2V4cGVjdGVkX291dHB1dHNfd29ya3Moc2VsZik6Ci0gICAgICAgIHppcCA9IE1vY2taaXAo
KQotICAgICAgICB6aXAuaW5zZXJ0KCd0ZXN0LWV4cGVjdGVkLnR4dCcsICAnZXhwZWN0ZWQgb3V0
cHV0cyBzdG9yZWQgb24gc2VydmVyIGZvciBzb21lIHJlYXNvbicpCi0gICAgICAgIGIgPSBzZWxm
Ll9vdXRwdXRzZXRfd2l0aF96aXAoemlwLCBpbmNsdWRlX2V4cGVjdGVkPUZhbHNlKQotICAgICAg
ICBvdXRwdXRzID0gYi5vdXRwdXRzX2ZvcigndGVzdCcsIHRhcmdldF90eXBlPU5vbmUpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDAsIGxlbihvdXRwdXRzKSkKLQotaWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3QucHkJKHJldmlz
aW9uIDkyNTUyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90
L2J1aWxkYm90LnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw3IEBAIGZyb20gd2Via2l0
cHkuY29tbW9uLm5ldC5mYWlsdXJlbWFwIGltcG8KIGZyb20gd2Via2l0cHkuY29tbW9uLm5ldC5s
YXlvdXR0ZXN0cmVzdWx0cyBpbXBvcnQgTGF5b3V0VGVzdFJlc3VsdHMKIGZyb20gd2Via2l0cHku
Y29tbW9uLm5ldC5uZXR3b3JrdHJhbnNhY3Rpb24gaW1wb3J0IE5ldHdvcmtUcmFuc2FjdGlvbgog
ZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnJlZ3Jlc3Npb253aW5kb3cgaW1wb3J0IFJlZ3Jlc3Np
b25XaW5kb3cKLWZyb20gd2Via2l0cHkuY29tbW9uLm5ldC50ZXN0b3V0cHV0c2V0IGltcG9ydCBU
ZXN0T3V0cHV0U2V0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ubG9ndXRpbHMgaW1wb3J0
IGdldF9sb2dnZXIKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS56aXBmaWxlc2V0IGltcG9y
dCBaaXBGaWxlU2V0CiBmcm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuQmVhdXRpZnVsU291cCBpbXBv
cnQgQmVhdXRpZnVsU291cAogCiAKQEAgLTI0NCw5ICsyNDIsNiBAQCBjbGFzcyBCdWlsZChvYmpl
Y3QpOgogICAgIGRlZiByZXN1bHRzX3ppcF91cmwoc2VsZik6CiAgICAgICAgIHJldHVybiAiJXMu
emlwIiAlIHNlbGYucmVzdWx0c191cmwoKQogCi0gICAgZGVmIHJlc3VsdHMoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBUZXN0T3V0cHV0U2V0KHNlbGYuX2J1aWxkZXIubmFtZSgpLCBOb25lLCBaaXBG
aWxlU2V0KHNlbGYucmVzdWx0c196aXBfdXJsKCkpLCBpbmNsdWRlX2V4cGVjdGVkPUZhbHNlKQot
CiAgICAgZGVmIF9mZXRjaF9maWxlX2Zyb21fcmVzdWx0cyhzZWxmLCBmaWxlX25hbWUpOgogICAg
ICAgICAjIEl0IHNlZW1zIHRoaXMgY2FuIHJldHVybiBOb25lIGlmIHRoZSB1cmwgcmVkaXJlY3Rz
IGFuZCB0aGVuIHJldHVybnMgNDA0LgogICAgICAgICByZXN1bHQgPSB1cmxsaWIyLnVybG9wZW4o
IiVzLyVzIiAlIChzZWxmLnJlc3VsdHNfdXJsKCksIGZpbGVfbmFtZSkpCkluZGV4OiBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9uZXQvYnVpbGRib3QvYnVpbGRib3RfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbmV0L2J1aWxkYm90
L2J1aWxkYm90X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiA5MjU1MikKKysrIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvY29tbW9uL25ldC9idWlsZGJvdC9idWlsZGJvdF91bml0dGVzdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNDY3LDExICs0NjcsNiBAQCBjbGFzcyBCdWlsZEJvdFRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICBiLnJlc3VsdHNfdXJsID0gc2VsZi5yZXN1bHRzX3VybAogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFscygic29tZS11cmwuemlwIiwgYi5yZXN1bHRzX3ppcF91cmwo
KSkKIAotICAgIGRlZiB0ZXN0X3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgIGJ1aWxkZXIgPSBCdWls
ZGVyKCdidWlsZGVyJywgQnVpbGRCb3QoKSkKLSAgICAgICAgYiA9IEJ1aWxkKGJ1aWxkZXIsIDEy
MywgMTIzLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5yZXN1bHRzKCkpCi0KIAog
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9kaXJlY3RvcnlmaWxlc2V0LnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS9kaXJlY3Rv
cnlmaWxlc2V0LnB5CShyZXZpc2lvbiA5MjU1MikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3N5c3RlbS9kaXJlY3RvcnlmaWxlc2V0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcx
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSMgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSMgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSMgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0jIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5maWxlc2V0IGltcG9ydCBGaWxlU2V0RmlsZUhhbmRsZQotZnJvbSB3ZWJr
aXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZpbGVTeXN0ZW0KLQotCi1jbGFz
cyBEaXJlY3RvcnlGaWxlU2V0KG9iamVjdCk6Ci0gICAgIiIiVGhlIHNldCBvZiBmaWxlcyB1bmRl
ciBhIGxvY2FsIGRpcmVjdG9yeS4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCwgZmls
ZXN5c3RlbT1Ob25lKToKLSAgICAgICAgc2VsZi5fcGF0aCA9IHBhdGgKLSAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0gb3IgRmlsZVN5c3RlbSgpCi0gICAgICAgIGlmIG5vdCBz
ZWxmLl9wYXRoLmVuZHN3aXRoKHNlbGYuX2ZpbGVzeXN0ZW0uc2VwKToKLSAgICAgICAgICAgIHNl
bGYuX3BhdGggKz0gc2VsZi5fZmlsZXN5c3RlbS5zZXAKLQotICAgIGRlZiBfZnVsbF9wYXRoKHNl
bGYsIGZpbGVuYW1lKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2lzX3VuZGVyKHNlbGYuX3BhdGgs
IGZpbGVuYW1lKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Bh
dGgsIGZpbGVuYW1lKQotCi0gICAgZGVmIF9kcm9wX2RpcmVjdG9yeV9wcmVmaXgoc2VsZiwgcGF0
aCk6Ci0gICAgICAgIHJldHVybiBwYXRoW2xlbihzZWxmLl9wYXRoKTpdCi0KLSAgICBkZWYgX2Zp
bGVzX2luX2RpcmVjdG9yeShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgYWxs
IHRoZSBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LCBpbmNsdWRpbmcgdGhlIHBhdGgKLSAgICAgICAg
ICAgdG8gdGhlIGRpcmVjdG9yeSIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5m
aWxlc191bmRlcihzZWxmLl9wYXRoKQotCi0gICAgZGVmIF9pc191bmRlcihzZWxmLCBkaXIsIGZp
bGVuYW1lKToKLSAgICAgICAgcmV0dXJuIGJvb2woc2VsZi5fZmlsZXN5c3RlbS5yZWxwYXRoKHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihkaXIsIGZpbGVuYW1lKSwgZGlyKSkKLQotICAgIGRlZiBvcGVu
KHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgcmV0dXJuIEZpbGVTZXRGaWxlSGFuZGxlKHNlbGYs
IGZpbGVuYW1lLCBzZWxmLl9maWxlc3lzdGVtKQotCi0gICAgZGVmIG5hbWVsaXN0KHNlbGYpOgot
ICAgICAgICByZXR1cm4gbWFwKHNlbGYuX2Ryb3BfZGlyZWN0b3J5X3ByZWZpeCwgc2VsZi5fZmls
ZXNfaW5fZGlyZWN0b3J5KCkpCi0KLSAgICBkZWYgcmVhZChzZWxmLCBmaWxlbmFtZSk6Ci0gICAg
ICAgIHJldHVybiBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX2Z1bGxfcGF0
aChmaWxlbmFtZSkpCi0KLSAgICBkZWYgZXh0cmFjdChzZWxmLCBmaWxlbmFtZSwgcGF0aCk6Ci0g
ICAgICAgICIiIkV4dHJhY3RzIGEgZmlsZSBmcm9tIHRoaXMgZmlsZSBzZXQgdG8gdGhlIHNwZWNp
ZmllZCBkaXJlY3RvcnkuIiIiCi0gICAgICAgIHNyYyA9IHNlbGYuX2Z1bGxfcGF0aChmaWxlbmFt
ZSkKLSAgICAgICAgZGVzdCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihwYXRoLCBmaWxlbmFtZSkK
LSAgICAgICAgIyBBcyBmaWxlbmFtZSBtYXkgaGF2ZSBzbGFzaGVzIGluIGl0LCB3ZSBtdXN0IGVu
c3VyZSB0aGF0IHRoZSBzYW1lCi0gICAgICAgICMgZGlyZWN0b3J5IGhpZXJhcmNoeSBleGlzdHMg
YXQgdGhlIG91dHB1dCBwYXRoLgotICAgICAgICBzZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2Vf
ZGlyZWN0b3J5KHNlbGYuX2ZpbGVzeXN0ZW0uZGlybmFtZShkZXN0KSkKLSAgICAgICAgc2VsZi5f
ZmlsZXN5c3RlbS5jb3B5ZmlsZShzcmMsIGRlc3QpCi0KLSAgICBkZWYgZGVsZXRlKHNlbGYsIGZp
bGVuYW1lKToKLSAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9mdWxsX3BhdGgoZmlsZW5hbWUpCi0g
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGZpbGVuYW1lKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2RpcmVjdG9yeWZpbGVzZXRfdW5pdHRlc3QucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2RpcmVj
dG9yeWZpbGVzZXRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDkyNTUyKQorKysgVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9jb21tb24vc3lzdGVtL2RpcmVjdG9yeWZpbGVzZXRfdW5pdHRlc3QucHkJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIwotIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0j
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0jICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
IyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
IyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0jIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSMgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotCi1pbXBvcnQgdW5p
dHRlc3QKLQotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmRpcmVjdG9yeWZpbGVzZXQgaW1w
b3J0IERpcmVjdG9yeUZpbGVTZXQKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lz
dGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCi0KLQotY2xhc3MgRGlyZWN0b3J5RmlsZVNl
dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAg
ZmlsZXMgPSB7fQotICAgICAgICBmaWxlc1snL3Rlc3Qvc29tZS1maWxlJ10gPSAnY29udGVudHMn
Ci0gICAgICAgIGZpbGVzWycvdGVzdC9zb21lLW90aGVyLWZpbGUnXSA9ICdvdGhlciBjb250ZW50
cycKLSAgICAgICAgZmlsZXNbJy90ZXN0L2IvYyddID0gJ2MnCi0gICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0gPSBNb2NrRmlsZVN5c3RlbShmaWxlcykKLSAgICAgICAgc2VsZi5fZmlsZXNldCA9IERp
cmVjdG9yeUZpbGVTZXQoJy90ZXN0Jywgc2VsZi5fZmlsZXN5c3RlbSkKLQotICAgIGRlZiB0ZXN0
X2ZpbGVzX2luX25hbWVsaXN0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3NvbWUt
ZmlsZScgaW4gc2VsZi5fZmlsZXNldC5uYW1lbGlzdCgpKQotICAgICAgICBzZWxmLmFzc2VydFRy
dWUoJ3NvbWUtb3RoZXItZmlsZScgaW4gc2VsZi5fZmlsZXNldC5uYW1lbGlzdCgpKQotICAgICAg
ICBzZWxmLmFzc2VydFRydWUoJ2IvYycgaW4gc2VsZi5fZmlsZXNldC5uYW1lbGlzdCgpKQotCi0g
ICAgZGVmIHRlc3RfcmVhZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2NvbnRl
bnRzJywgc2VsZi5fZmlsZXNldC5yZWFkKCdzb21lLWZpbGUnKSkKLQotICAgIGRlZiB0ZXN0X29w
ZW4oc2VsZik6Ci0gICAgICAgIGZpbGUgPSBzZWxmLl9maWxlc2V0Lm9wZW4oJ3NvbWUtZmlsZScp
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKCdzb21lLWZpbGUnLCBmaWxlLm5hbWUoKSkKLSAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2NvbnRlbnRzJywgZmlsZS5jb250ZW50cygpKQotCi0g
ICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZXNldC5leHRyYWN0
KCdzb21lLWZpbGUnLCAnL3Rlc3QtZGlyZWN0b3J5JykKLSAgICAgICAgY29udGVudHMgPSBzZWxm
Ll9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcvdGVzdC1kaXJlY3Rvcnkvc29tZS1maWxlJykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoJ2NvbnRlbnRzJywgY29udGVudHMpCi0KLSAgICBk
ZWYgdGVzdF9leHRyYWN0X2RlZXBfZmlsZShzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZXNldC5l
eHRyYWN0KCdiL2MnLCAnL3Rlc3QtZGlyZWN0b3J5JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKCcvdGVzdC1kaXJlY3RvcnkvYi9jJykpCi0KLSAgICBk
ZWYgdGVzdF9kZWxldGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl9maWxl
c3lzdGVtLmV4aXN0cygnL3Rlc3Qvc29tZS1maWxlJykpCi0gICAgICAgIHNlbGYuX2ZpbGVzZXQu
ZGVsZXRlKCdzb21lLWZpbGUnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuX2ZpbGVz
eXN0ZW0uZXhpc3RzKCcvdGVzdC9zb21lLWZpbGUnKSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQkocmV2aXNpb24gOTI1NTIpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDcgKzM5LDYgQEAgaW1wb3J0IG9zCiAKIGZyb20gd2Via2l0cHkuY29tbW9u
LmNoZWNrb3V0LnNjbSBpbXBvcnQgZGV0ZWN0X3NjbV9zeXN0ZW0KIGZyb20gd2Via2l0cHkuY29t
bW9uLm1lbW9pemVkIGltcG9ydCBtZW1vaXplZAotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnRl
c3RvdXRwdXRzZXQgaW1wb3J0IEFnZ3JlZ2F0ZVRlc3RPdXRwdXRTZXQKIAogCiAjIEhhbmRsZSBQ
eXRob24gPCAyLjYgd2hlcmUgbXVsdGlwcm9jZXNzaW5nIGlzbid0IGF2YWlsYWJsZS4KQEAgLTU4
NywxNCArNTg2LDYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICBleHBlY3RhdGlvbnMs
IGRldGVybWluaW5nIHNlYXJjaCBwYXRocywgYW5kIGxvZ2dpbmcgaW5mb3JtYXRpb24uIiIiCiAg
ICAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKLSAgICBkZWYgX3Jlc3VsdHNfZm9yX3BsYXRm
b3JtKHNlbGYsIHBsYXRmb3JtKToKLSAgICAgICAgIiIiUmV0dXJucyBhIFRlc3RPdXRwdXRTZXQg
Zm9yIHRoZSBib3RzIG9mIHRoZSBnaXZlbiBwbGF0Zm9ybS4iIiIKLSAgICAgICAgcmFpc2UgTm90
SW1wbGVtZW50ZWRFcnJvcignUG9ydC5fcmVzdWx0c19mb3JfcGxhdGZvcm0nKQotCi0gICAgZGVm
IGJ1aWxkYm90X3Rlc3Rfb3V0cHV0X3NldChzZWxmLCBwbGF0Zm9ybXMpOgotICAgICAgICAiIiJS
ZXR1cm5zIGEgVGVzdE91dHB1dFNldCBmb3IgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybXMgZm9yIHRo
aXMgcG9ydHMgYnVpbGRib3RzLiIiIgotICAgICAgICByZXR1cm4gQWdncmVnYXRlVGVzdE91dHB1
dFNldChbc2VsZi5fcmVzdWx0c19mb3JfcGxhdGZvcm0ocGxhdGZvcm0pIGZvciBwbGF0Zm9ybSBp
biBwbGF0Zm9ybXNdKQotCiAgICAgZGVmIGdyYXBoaWNzX3R5cGUoc2VsZik6CiAgICAgICAgICIi
IlJldHVybnMgd2hldGhlciB0aGUgcG9ydCB1c2VzIGFjY2VsZXJhdGVkIGdyYXBoaWNzICgnZ3B1
Jykgb3Igbm90ICgnY3B1JykuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9ncmFwaGljc190eXBl
CkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Nocm9taXVt
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvY2hyb21pdW0ucHkJKHJldmlzaW9uIDkyNTUyKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bS5weQkod29ya2luZyBjb3B5KQpAQCAtNDAsMTAg
KzQwLDggQEAgaW1wb3J0IHRpbWUKIGltcG9ydCB3ZWJicm93c2VyCiAKIGZyb20gd2Via2l0cHku
Y29tbW9uLmNvbmZpZyBpbXBvcnQgdXJscwotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0LnRlc3Rv
dXRwdXRzZXQgaW1wb3J0IFRlc3RPdXRwdXRTZXQKIGZyb20gd2Via2l0cHkuY29tbW9uLnN5c3Rl
bSBpbXBvcnQgZXhlY3V0aXZlCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0ucGF0aCBpbXBv
cnQgY3lncGF0aAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLnppcGZpbGVzZXQgaW1wb3J0
IFppcEZpbGVTZXQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVz
dF9leHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2Nv
bmZpZ3VyYXRpb24gaW1wb3J0IFRlc3RDb25maWd1cmF0aW9uCiBmcm9tIHdlYmtpdHB5LmxheW91
dF90ZXN0cy5wb3J0LmJhc2UgaW1wb3J0IFBvcnQKQEAgLTIyNSwxNCArMjIzLDYgQEAgY2xhc3Mg
Q2hyb21pdW1Qb3J0KFBvcnQpOgogICAgICAgICByZXR1cm4gc2VsZi5wYXRoX2Zyb21fd2Via2l0
X2Jhc2UoJ0xheW91dFRlc3RzJywgJ3BsYXRmb3JtJywKICAgICAgICAgICAgICdjaHJvbWl1bScs
ICd0ZXN0X2V4cGVjdGF0aW9ucy50eHQnKQogCi0gICAgZGVmIF9yZXN1bHRzX2Zvcl9wbGF0Zm9y
bShzZWxmLCBwbGF0Zm9ybSk6Ci0gICAgICAgIGJ1aWxkZXJfbmFtZSA9IGJ1aWxkZXJzLmJ1aWxk
ZXJfcGF0aF9mb3JfcG9ydF9uYW1lKHBsYXRmb3JtKQotICAgICAgICBpZiBub3QgYnVpbGRlcl9u
YW1lOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDYW4ndCBmaW5kIGJ1aWxkZXIgZm9y
ICVzIiAlIHBsYXRmb3JtKQotICAgICAgICB6aXBfdXJsID0gdXJscy5jaHJvbWl1bV9yZXN1bHRz
X3ppcF91cmwoYnVpbGRlcl9uYW1lKQotICAgICAgICByZXR1cm4gVGVzdE91dHB1dFNldChidWls
ZGVyX25hbWUsIHBsYXRmb3JtLCBaaXBGaWxlU2V0KHppcF91cmwpLAotICAgICAgICAgICAgICAg
IGluY2x1ZGVfZXhwZWN0ZWQ9RmFsc2UpCi0KICAgICBkZWYgZGVmYXVsdF9yZXN1bHRzX2RpcmVj
dG9yeShzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucGF0aF9m
cm9tX2Nocm9taXVtX2Jhc2UoJ3dlYmtpdCcsCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQkocmV2aXNpb24gOTI1NTIpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYmtpdC5weQkod29y
a2luZyBjb3B5KQpAQCAtODAsMTYgKzgwLDYgQEAgY2xhc3MgV2ViS2l0UG9ydChQb3J0KToKICAg
ICAgICAgZXhwZWN0YXRpb25zX2RpcmVjdG9yeSA9IHNlbGYuX3drMl9wb3J0X25hbWUoKSBpZiBz
ZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpIGVsc2Ugc2VsZi5wb3J0X25hbWUK
ICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxp
bmVfcGF0aChleHBlY3RhdGlvbnNfZGlyZWN0b3J5KSwgJ3Rlc3RfZXhwZWN0YXRpb25zLnR4dCcp
CiAKLSAgICBkZWYgX3Jlc3VsdHNfZm9yX3BsYXRmb3JtKHNlbGYsIHBsYXRmb3JtKToKLSAgICAg
ICAgYnVpbGRlcl9uYW1lID0gYnVpbGRlcnMuYnVpbGRlcl9wYXRoX2Zvcl9wb3J0X25hbWUocGxh
dGZvcm0pCi0gICAgICAgIGlmIG5vdCBidWlsZGVyX25hbWU6Ci0gICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oIkNhbid0IGZpbmQgYnVpbGRlciBmb3IgJXMiICUgcGxhdGZvcm0pCi0gICAgICAg
IGJ1aWxkZXJzX2J5X25hbWUgPSBkaWN0KFsoYnVpbGRlci5uYW1lKCksIGJ1aWxkZXIpIGZvciBi
dWlsZGVyIGluIEJ1aWxkQm90KCkuYnVpbGRlcnMoKV0pCi0gICAgICAgIGJ1aWxkZXIgPSBidWls
ZGVyc19ieV9uYW1lW2J1aWxkZXJfbmFtZV0KLSAgICAgICAgcmVzdWx0X3NldCA9IGJ1aWxkZXIu
bGF0ZXN0X2NhY2hlZF9idWlsZCgpLnJlc3VsdHMoKQotICAgICAgICByZXN1bHRfc2V0LnNldF9w
bGF0Zm9ybShwbGF0Zm9ybSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdF9zZXQKLQogICAgIGRlZiBf
ZHJpdmVyX2J1aWxkX3NjcmlwdF9uYW1lKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmdldF9vcHRp
b24oJ3dlYmtpdF90ZXN0X3J1bm5lcicpOgogICAgICAgICAgICAgcmV0dXJuICJidWlsZC13ZWJr
aXR0ZXN0cnVubmVyIgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>