<?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>78836</bug_id>
          
          <creation_ts>2012-02-16 13:35:03 -0800</creation_ts>
          <short_desc>XSSAuditor bypass with &lt;svg&gt; tags and html-entities.</short_desc>
          <delta_ts>2012-02-22 14:21:05 -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>WebCore Misc.</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="Thomas Sepez">tsepez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>558478</commentid>
    <comment_count>0</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-16 13:35:03 -0800</bug_when>
    <thetext>Originally reported by masatokinugawa at http://code.google.com/p/chromium/issues/detail?id=114641

Reflected vectors are of the form:

?xss=%3Csvg%3E%3Cscript%3E//%26%23x0A%3Balert(1)%3C/script%3E
?xss=%3Csvg%3E%3Cscript%3E//%26%23x0D%3Balert(1)%3C/script%3E
?xss=%3Csvg%3E%3Cscript%3E//%26%23x2028%3Balert(1)%3C/script%3E
?xss=%3Csvg%3E%3Cscript%3E//%26%23x2029%3Balert(1)%3C/script%3E
?xss=%3Csvg%3E%3Cscript%3E/**%26%23x2F%3Balert(1)%3C/script%3E

SVG is XML and hence the entities get decoded during parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558491</commentid>
    <comment_count>1</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-16 13:51:12 -0800</bug_when>
    <thetext>Probably the right way to fix this is for xssauditor to know when it is in an SVG block vs. an ordinary script block, and apply html entity decoding to match the HTML vs. XML expectations.  Trying to always html entity decode will open up vulns in the HTML case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559631</commentid>
    <comment_count>2</comment_count>
      <attachid>127672</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-17 16:19:58 -0800</bug_when>
    <thetext>Created attachment 127672
First cut at Patch -- needs more analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561193</commentid>
    <comment_count>3</comment_count>
      <attachid>128037</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-21 13:53:38 -0800</bug_when>
    <thetext>Created attachment 128037
Patch for initial review (needs more testing before commit).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561200</commentid>
    <comment_count>4</comment_count>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-21 14:03:23 -0800</bug_when>
    <thetext>So the idea in patch #2 is that the state of initial token / after scrip tag goes away, and is replaced by a count of the depth of the script blocks (which is cheaper than trying to keep a stack of tags).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>561221</commentid>
    <comment_count>5</comment_count>
      <attachid>128037</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-21 14:19:55 -0800</bug_when>
    <thetext>Comment on attachment 128037
Patch for initial review (needs more testing before commit).

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

This looks fantastic.  Thanks.

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:586
&gt; +          break;

bad indent</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562281</commentid>
    <comment_count>6</comment_count>
      <attachid>128269</attachid>
    <who name="Thomas Sepez">tsepez</who>
    <bug_when>2012-02-22 12:54:14 -0800</bug_when>
    <thetext>Created attachment 128269
Patch + indent fix.

Let&apos;s try to land this to avoid merging around it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562387</commentid>
    <comment_count>7</comment_count>
      <attachid>128269</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 14:21:00 -0800</bug_when>
    <thetext>Comment on attachment 128269
Patch + indent fix.

Clearing flags on attachment: 128269

Committed r108551: &lt;http://trac.webkit.org/changeset/108551&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562388</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-22 14:21:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127672</attachid>
            <date>2012-02-17 16:19:58 -0800</date>
            <delta_ts>2012-02-21 13:53:38 -0800</delta_ts>
            <desc>First cut at Patch -- needs more analysis.</desc>
            <filename>patch_78836.txt</filename>
            <type>text/plain</type>
            <size>18328</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODEzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAyLTE3ICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTU0F1ZGl0b3IgYnlwYXNzIHdp
dGggPHN2Zz4gdGFncyBhbmQgaHRtbC1lbnRpdGllcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMi5odG1s
CisgICAgICAgICAgICAgICBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy1pbnNpZGUtc3ZnLXRhZzMuaHRtbAorCisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc05vbkNhbm9uaWNhbENoYXJhY3Rlcik6CisgICAg
ICAgIChXZWJDb3JlOjppc1Rlcm1pbmF0aW5nQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OmlzSlNOZXdsaW5lKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6c3Rh
cnRzSFRNTENvbW1lbnRBdCk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydHNTaW5nbGVMaW5lQ29t
bWVudEF0KToKKyAgICAgICAgKFdlYkNvcmU6OmZ1bGx5RGVjb2RlU3RyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OlhTU0F1ZGl0b3IpOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyVG9rZW5BZnRlclNjcmlwdFN0YXJ0VGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0
b3I6OmZpbHRlclNjcmlwdFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRl
Y29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OnNuaXBwZXRGb3JKYXZhU2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9y
Lmg6CisgICAgICAgIChYU1NBdWRpdG9yKToKKwogMjAxMi0wMi0xNyAgRW1pbCBBIEVrbHVuZCAg
PGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIEZyYWN0aW9uYWxMYXlvdXRQb2ludCBm
b3Igc3ViLXBpeGVsIGxheW91dApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNT
QXVkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNT
QXVkaXRvci5jcHAJKHJldmlzaW9uIDEwNzk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1hTU0F1ZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJIVE1MRG9jdW1lbnRQYXJzZXIu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCiAj
aW5jbHVkZSAiSFRNTFBhcmFtRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtNTQsNyArNTUsNyBAQCBzdGF0aWMg
Ym9vbCBpc05vbkNhbm9uaWNhbENoYXJhY3RlcihVQ2hhCiAgICAgLy8gV2UgcmVtb3ZlIGFsbCBu
b24tQVNDSUkgY2hhcmFjdGVycywgaW5jbHVkaW5nIG5vbi1wcmludGFibGUgQVNDSUkgY2hhcmFj
dGVycy4KICAgICAvLwogICAgIC8vIE5vdGUsIHdlIGRvbid0IHJlbW92ZSBiYWNrc2xhc2hlcyBs
aWtlIFBIUCBzdHJpcHNsYXNoZXMoKSwgd2hpY2ggYW1vbmcgb3RoZXIgdGhpbmdzIGNvbnZlcnRz
ICJcXDAiIHRvIHRoZSBcMCBjaGFyYWN0ZXIuCi0gICAgLy8gSW5zdGVhZCwgd2UgcmVtb3ZlIGJh
Y2tzbGFzaGVzIGFuZCB6ZXJvcyAoc2luY2UgdGhlIHN0cmluZyAiXFwwIiA9KHJlbW92ZSBiYWNr
c2xhc2hlcyk9PiAiMCIpLiBIb3dldmVyLCB0aGlzIGhhcyB0aGUgCisgICAgLy8gSW5zdGVhZCwg
d2UgcmVtb3ZlIGJhY2tzbGFzaGVzIGFuZCB6ZXJvcyAoc2luY2UgdGhlIHN0cmluZyAiXFwwIiA9
KHJlbW92ZSBiYWNrc2xhc2hlcyk9PiAiMCIpLiBIb3dldmVyLCB0aGlzIGhhcyB0aGUKICAgICAv
LyBhZHZlcnNlIGVmZmVjdCB0aGF0IHdlIHJlbW92ZSBhbnkgbGVnaXRpbWF0ZSB6ZXJvcyBmcm9t
IGEgc3RyaW5nLgogICAgIC8vCiAgICAgLy8gRm9yIGluc3RhbmNlOiBuZXcgU3RyaW5nKCJodHRw
Oi8vbG9jYWxob3N0OjgwMDAiKSA9PiBuZXcgU3RyaW5nKCJodHRwOi8vbG9jYWxob3N0OjgiKS4K
QEAgLTcxLDcgKzcyLDcgQEAgc3RhdGljIGJvb2wgaXNSZXF1aXJlZEZvckluamVjdGlvbihVQ2hh
cgogICAgIHJldHVybiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInIHx8IGMgPT0gJzwnIHx8IGMgPT0g
Jz4nKTsKIH0KIAotc3RhdGljIGJvb2wgaXNUZXJtaW5hdGluZ0NoYXJhY3RlcihVQ2hhciBjKSAK
K3N0YXRpYyBib29sIGlzVGVybWluYXRpbmdDaGFyYWN0ZXIoVUNoYXIgYykKIHsKICAgICByZXR1
cm4gKGMgPT0gJyYnIHx8IGMgPT0gJy8nIHx8IGMgPT0gJyInIHx8IGMgPT0gJ1wnJyB8fCBjID09
ICc8Jyk7CiB9CkBAIC04MywyNSArODQsMTggQEAgc3RhdGljIGJvb2wgaXNIVE1MUXVvdGUoVUNo
YXIgYykKIAogc3RhdGljIGJvb2wgaXNKU05ld2xpbmUoVUNoYXIgYykKIHsKLSAgICAvLyBQZXIg
ZWNtYS0yNjIgc2VjdGlvbiA3LjMgTGluZSBUZXJtaW5hdG9ycy4KICAgICByZXR1cm4gKGMgPT0g
J1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAweDIwMjggfHwgYyA9PSAweDIwMjkpOwogfQogCi1z
dGF0aWMgYm9vbCBzdGFydHNIVE1MRW5kVGFnQXQoY29uc3QgU3RyaW5nJiBzdHJpbmcsIHNpemVf
dCBzdGFydCkKLXsKLSAgICByZXR1cm4gKHN0YXJ0ICsgMSA8IHN0cmluZy5sZW5ndGgoKSAmJiBz
dHJpbmdbc3RhcnRdID09ICc8JyAmJiBzdHJpbmdbc3RhcnQrMV0gPT0gJy8nKTsKLX0gICAgCi0K
LQogc3RhdGljIGJvb2wgc3RhcnRzSFRNTENvbW1lbnRBdChjb25zdCBTdHJpbmcmIHN0cmluZywg
c2l6ZV90IHN0YXJ0KQogewogICAgIHJldHVybiAoc3RhcnQgKyAzIDwgc3RyaW5nLmxlbmd0aCgp
ICYmIHN0cmluZ1tzdGFydF0gPT0gJzwnICYmIHN0cmluZ1tzdGFydCsxXSA9PSAnIScgJiYgc3Ry
aW5nW3N0YXJ0KzJdID09ICctJyAmJiBzdHJpbmdbc3RhcnQrM10gPT0gJy0nKTsKLX0gICAgCit9
CiAKIHN0YXRpYyBib29sIHN0YXJ0c1NpbmdsZUxpbmVDb21tZW50QXQoY29uc3QgU3RyaW5nJiBz
dHJpbmcsIHNpemVfdCBzdGFydCkKIHsKICAgICByZXR1cm4gKHN0YXJ0ICsgMSA8IHN0cmluZy5s
ZW5ndGgoKSAmJiBzdHJpbmdbc3RhcnRdID09ICcvJyAmJiBzdHJpbmdbc3RhcnQrMV0gPT0gJy8n
KTsKLX0gICAgCit9CiAKIHN0YXRpYyBib29sIHN0YXJ0c011bHRpTGluZUNvbW1lbnRBdChjb25z
dCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQogewpAQCAtMTc3LDcgKzE3MSw2IEBAIHN0
YXRpYyBTdHJpbmcgZnVsbHlEZWNvZGVTdHJpbmcoY29uc3QgU3QKICAgICAgICAgb2xkV29ya2lu
Z1N0cmluZ0xlbmd0aCA9IHdvcmtpbmdTdHJpbmcubGVuZ3RoKCk7CiAgICAgICAgIHdvcmtpbmdT
dHJpbmcgPSBkZWNvZGUxNkJpdFVuaWNvZGVFc2NhcGVTZXF1ZW5jZXMoZGVjb2RlU3RhbmRhcmRV
UkxFc2NhcGVTZXF1ZW5jZXMod29ya2luZ1N0cmluZywgZW5jb2RpbmcpKTsKICAgICB9IHdoaWxl
ICh3b3JraW5nU3RyaW5nLmxlbmd0aCgpIDwgb2xkV29ya2luZ1N0cmluZ0xlbmd0aCk7Ci0gICAg
QVNTRVJUKCF3b3JraW5nU3RyaW5nLmlzRW1wdHkoKSk7CiAgICAgd29ya2luZ1N0cmluZy5yZXBs
YWNlKCcrJywgJyAnKTsKICAgICB3b3JraW5nU3RyaW5nID0gY2Fub25pY2FsaXplKHdvcmtpbmdT
dHJpbmcpOwogICAgIHJldHVybiB3b3JraW5nU3RyaW5nOwpAQCAtMTg4LDYgKzE4MSw4IEBAIFhT
U0F1ZGl0b3I6OlhTU0F1ZGl0b3IoSFRNTERvY3VtZW50UGFyc2UKICAgICAsIG1faXNFbmFibGVk
KGZhbHNlKQogICAgICwgbV94c3NQcm90ZWN0aW9uKFhTU1Byb3RlY3Rpb25FbmFibGVkKQogICAg
ICwgbV9zdGF0ZShVbmluaXRpYWxpemVkKQorICAgICwgbV9zaG91bGRBbGxvd0NEQVRBKGZhbHNl
KQorICAgICwgbV90YWdOZXN0aW5nTGV2ZWwoMCkKICAgICAsIG1fbm90aWZpZWRDbGllbnQoZmFs
c2UpCiB7CiAgICAgQVNTRVJUKG1fcGFyc2VyKTsKQEAgLTI3MywxMiArMjY4LDEyIEBAIHZvaWQg
WFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW4oSFRNTFRva2VuJiAKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5pdGlhbDoKKyAgICAgICAgbV9j
YWNoZWRTbmlwcGV0ID0gU3RyaW5nKCk7CisgICAgICAgIG1fc2hvdWxkQWxsb3dDREFUQSA9IGZh
bHNlOwogICAgICAgICBkaWRCbG9ja1NjcmlwdCA9IGZpbHRlclRva2VuSW5pdGlhbCh0b2tlbik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWZ0ZXJTY3JpcHRTdGFydFRhZzoKICAgICAgICAg
ZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJUb2tlbkFmdGVyU2NyaXB0U3RhcnRUYWcodG9rZW4pOwot
ICAgICAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKLSAgICAgICAgbV9jYWNoZWRTbmlw
cGV0ID0gU3RyaW5nKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzM1LDI0ICszMzAs
NTEgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tlbkluaXRpYWwoSFRNTAogYm9vbCBYU1NB
dWRpdG9yOjpmaWx0ZXJUb2tlbkFmdGVyU2NyaXB0U3RhcnRUYWcoSFRNTFRva2VuJiB0b2tlbikK
IHsKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBBZnRlclNjcmlwdFN0YXJ0VGFnKTsKLSAgICBtX3N0
YXRlID0gSW5pdGlhbDsKIAotICAgIGlmICh0b2tlbi50eXBlKCkgIT0gSFRNTFRva2VuVHlwZXM6
OkNoYXJhY3RlcikgewotICAgICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpFbmRUYWcgfHwgdG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpFbmRPZkZpbGUp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHN3aXRjaCAodG9rZW4udHlwZSgp
KSB7CisgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6RE9DVFlQRToKKyAgICBjYXNlIEhUTUxUb2tl
blR5cGVzOjpDb21tZW50OgorICAgICAgICBBU1NFUlQobV9zaG91bGRBbGxvd0NEQVRBKTsKKyAg
ICAgICAgYnJlYWs7CiAKLSAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyID0gbV9wYXJz
ZXItPmRvY3VtZW50KCktPmRlY29kZXIoKTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3Qo
ZnVsbHlEZWNvZGVTdHJpbmcobV9jYWNoZWRTbmlwcGV0LCBkZWNvZGVyKSkpIHsKLSAgICAgICAg
aW50IHN0YXJ0ID0gMDsKLSAgICAgICAgaW50IGVuZCA9IHRva2VuLmVuZEluZGV4KCkgLSB0b2tl
bi5zdGFydEluZGV4KCk7Ci0gICAgICAgIFN0cmluZyBzbmlwcGV0ID0gc25pcHBldEZvckphdmFT
Y3JpcHQoc25pcHBldEZvclJhbmdlKHRva2VuLCBzdGFydCwgZW5kKSk7Ci0gICAgICAgIGlmIChp
c0NvbnRhaW5lZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhzbmlwcGV0LCBkZWNvZGVyKSkp
IHsKLSAgICAgICAgICAgIHRva2VuLmVyYXNlQ2hhcmFjdGVycygpOwotICAgICAgICAgICAgdG9r
ZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tl
bnMgY2FuJ3QgYmUgZW1wdHkuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEhU
TUxUb2tlblR5cGVzOjpFbmRPZkZpbGU6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIVE1M
VG9rZW5UeXBlczo6U3RhcnRUYWc6CisgICAgICAgIEFTU0VSVChtX3Nob3VsZEFsbG93Q0RBVEEp
OworICAgICAgICBtX3RhZ05lc3RpbmdMZXZlbCsrOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgSFRNTFRva2VuVHlwZXM6OkVuZFRhZzoKKyAgICAgICAgaWYgKG1fdGFnTmVzdGluZ0xldmVs
KSB7CisgICAgICAgICAgICBBU1NFUlQobV9zaG91bGRBbGxvd0NEQVRBKTsKKyAgICAgICAgICAg
IG1fdGFnTmVzdGluZ0xldmVsLS07CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zdGF0
ZSA9IEluaXRpYWw7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBIVE1MVG9rZW5UeXBlczo6
Q2hhcmFjdGVyOgorICAgICAgICB7CisgICAgICAgICAgICBUZXh0UmVzb3VyY2VEZWNvZGVyKiBk
ZWNvZGVyID0gbV9wYXJzZXItPmRvY3VtZW50KCktPmRlY29kZXIoKTsKKyAgICAgICAgICAgIGlm
IChpc0NvbnRhaW5lZEluUmVxdWVzdChmdWxseURlY29kZVN0cmluZyhtX2NhY2hlZFNuaXBwZXQs
IGRlY29kZXIpKSkgeworICAgICAgICAgICAgICBpbnQgc3RhcnQgPSAwOworICAgICAgICAgICAg
ICBpbnQgZW5kID0gdG9rZW4uZW5kSW5kZXgoKSAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKKyAgICAg
ICAgICAgICAgU3RyaW5nIHNuaXBwZXQgPSBzbmlwcGV0Rm9ySmF2YVNjcmlwdChzbmlwcGV0Rm9y
UmFuZ2UodG9rZW4sIHN0YXJ0LCBlbmQpKTsKKyAgICAgICAgICAgICAgaWYgKGlzQ29udGFpbmVk
SW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBwZXQsIGRlY29kZXIpKSkgeworICAgICAg
ICAgICAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICAgICAgICB0
b2tlbi5hcHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRv
a2VucyBjYW4ndCBiZSBlbXB0eS4KKyAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIEhUTUxUb2tlblR5cGVzOjpVbmluaXRpYWxpemVkOgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCkBAIC0zNjcsNiArMzg5LDcgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJTY3Jp
cHRUb2tlbihIVE1MVAogCiAgICAgbV9zdGF0ZSA9IEFmdGVyU2NyaXB0U3RhcnRUYWc7CiAgICAg
bV9jYWNoZWRTbmlwcGV0ID0gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKTsKKyAgICBt
X3Nob3VsZEFsbG93Q0RBVEEgPSBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNob3VsZEFsbG93Q0RB
VEEoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTU0MSw4ICs1NjQsNiBAQCBTdHJpbmcg
WFNTQXVkaXRvcjo6c25pcHBldEZvclJhbmdlKGNvbnN0CiAKIFN0cmluZyBYU1NBdWRpdG9yOjpk
ZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBjb25zdCBI
VE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCkK
IHsKLSAgICBjb25zdCBzaXplX3Qga01heGltdW1TbmlwcGV0TGVuZ3RoID0gMTAwOwotCiAgICAg
Ly8gVGhlIHJhbmdlIGRvZXNuJ3QgaW5sY3VkZSB0aGUgY2hhcmFjdGVyIHdoaWNoIHRlcm1pbmF0
ZXMgdGhlIHZhbHVlLiBTbywKICAgICAvLyBmb3IgYW4gaW5wdXQgb2YgfG5hbWU9InZhbHVlInws
IHRoZSBzbmlwcGV0IGlzIHxuYW1lPSJ2YWx1ZXwuIEZvciBhbgogICAgIC8vIHVucXVvdGVkIGlu
cHV0IG9mIHxuYW1lPXZhbHVlIHwsIHRoZSBzbmlwcGV0IGlzIHxuYW1lPXZhbHVlfC4KQEAgLTU1
MCw3ICs1NzEsNyBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyCiAg
ICAgaW50IHN0YXJ0ID0gYXR0cmlidXRlLm1fbmFtZVJhbmdlLm1fc3RhcnQgLSB0b2tlbi5zdGFy
dEluZGV4KCk7CiAgICAgaW50IGVuZCA9IGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQgLSB0
b2tlbi5zdGFydEluZGV4KCk7CiAgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNv
ZGVTdHJpbmcoc25pcHBldEZvclJhbmdlKHRva2VuLCBzdGFydCwgZW5kKSwgbV9wYXJzZXItPmRv
Y3VtZW50KCktPmRlY29kZXIoKSk7Ci0gICAgZGVjb2RlZFNuaXBwZXQudHJ1bmNhdGUoa01heGlt
dW1TbmlwcGV0TGVuZ3RoKTsKKyAgICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShrTWF4aW11bUZy
YWdtZW50TGVuZ3RoVGFyZ2V0KTsKICAgICBpZiAodHJlYXRtZW50ID09IFNyY0xpa2VBdHRyaWJ1
dGUpIHsKICAgICAgICAgaW50IHNsYXNoQ291bnQ7CiAgICAgICAgIHNpemVfdCBjdXJyZW50TGVu
Z3RoOwpAQCAtNTkzLDggKzYxNCw2IEBAIGJvb2wgWFNTQXVkaXRvcjo6aXNTYW1lT3JpZ2luUmVz
b3VyY2UoY28KIAogU3RyaW5nIFhTU0F1ZGl0b3I6OnNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IHNpemVfdCBrTWF4aW11bUZyYWdtZW50TGVu
Z3RoVGFyZ2V0ID0gMTAwOwotCiAgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24gPSAwOwogICAgIHNp
emVfdCBlbmRQb3NpdGlvbiA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBzaXplX3QgZm91bmRQb3Np
dGlvbiA9IG5vdEZvdW5kOwpAQCAtNjAzLDYgKzYyMiwxNSBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6
c25pcHBldEZvckphdmFTY3JpcHQoCiAgICAgd2hpbGUgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3Np
dGlvbikgewogICAgICAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uICYmIGlz
SFRNTFNwYWNlKHN0cmluZ1tzdGFydFBvc2l0aW9uXSkpCiAgICAgICAgICAgICBzdGFydFBvc2l0
aW9uKys7CisKKyAgICAgICAgLy8gVW5kZXIgU1ZHL1hNTCBydWxlcywgb25seSBIVE1MIGNvbW1l
bnQgc3ludGF4IG1hdHRlcnMgYW5kIHRoZSBwYXJzZXIgcmV0dXJucworICAgICAgICAvLyB0aGVz
ZSBhcyBhIHNlcGFyYXRlIGNvbW1lbnQgdG9rZW5zLiBIYXZpbmcgY29uc3VtZWQgd2hpdGVzcGFj
ZSwgd2UgbmVlZCBub3QgbG9vaworICAgICAgICAvLyBmdXJ0aGVyIGZvciB0aGVzZS4KKyAgICAg
ICAgaWYgKG1fc2hvdWxkQWxsb3dDREFUQSkKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAv
LyBVbmRlciBIVE1MIHJ1bGVzLCBib3RoIHRoZSBIVE1MIGFuZCBKUyBjb21tZW50IHN5bmF0eCBt
YXR0ZXJzLCBhbmQgdGhlIEhUTUwKKyAgICAgICAgLy8gY29tbWVudCBlbmRzIGF0IHRoZSBlbmQg
b2YgdGhlIGxpbmUsIG5vdCB3aXRoIC0tPi4KICAgICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50
QXQoc3RyaW5nLCBzdGFydFBvc2l0aW9uKSB8fCBzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0
cmluZywgc3RhcnRQb3NpdGlvbikpIHsKICAgICAgICAgICAgIHdoaWxlIChzdGFydFBvc2l0aW9u
IDwgZW5kUG9zaXRpb24gJiYgIWlzSlNOZXdsaW5lKHN0cmluZ1tzdGFydFBvc2l0aW9uXSkpCiAg
ICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOwpAQCAtNjE1LDI5ICs2NDMsMjkgQEAgU3Ry
aW5nIFhTU0F1ZGl0b3I6OnNuaXBwZXRGb3JKYXZhU2NyaXB0KAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgLy8gU3RvcCBhdCBuZXh0IGNvbW1lbnQsIG9yIGF0IGEgY2xvc2luZyBz
Y3JpcHQgdGFnICh3aGljaCBtYXkgaGF2ZSBiZWVuIGluY2x1ZGVkIHdpdGgKLSAgICAvLyB0aGUg
Y29kZSBmcmFnbWVudCBiZWNhdXNlIG9mIGJ1ZmZlcmluZyBpbiB0aGUgSFRNTFNvdXJjZVRyYWNr
ZXIpLCBvciB3aGVuIHdlIGV4Y2VlZAotICAgIC8vIHRoZSBtYXhpbXVtIGxlbmd0aCB0YXJnZXQu
IEFmdGVyIGhpdHRpbmcgdGhlIGxlbmd0aCB0YXJnZXQsIHdlIGNhbiBvbmx5IHN0b3AgYXQgYQot
ICAgIC8vIHBvaW50IHdoZXJlIHdlIGtub3cgd2UgYXJlIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEg
JS1lc2NhcGUgc2VxdWVuY2UuIEZvciB0aGUgc2FrZSBvZgotICAgIC8vIHNpbXBsaWNpdHksIGFw
cHJveGltYXRlIHN0b3BwaW5nIGF0IGEgY2xvc2Ugc2NyaXB0IHRhZyBieSBzdG9wcGluZyBhdCBh
bnkgY2xvc2UgdGFnLAotICAgIC8vIGFuZCBhcHByb3hpbWF0ZSBub3Qgc3RvcHBpbmcgaW5zaWRl
IGEgKHBvc3NpYmx5IG11bHRpcGx5IGVuY29kZWQpICUtZXNhY3BlIHNlcXVlbmNlCi0gICAgLy8g
YnkgYnJlYWtpbmcgb24gd2hpdGVzcGFjZSBvbmx5LiBXZSBzaG91bGQgaGF2ZSBlbm91Z2ggdGV4
dCBpbiB0aGVzZSBjYXNlcyB0byBhdm9pZAotICAgIC8vIGZhbHNlIHBvc2l0aXZlcy4KKyAgICAv
LyBTdG9wIGF0IG5leHQgY29tbWVudCAodXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgYWJvdmUgZm9y
IFNWRy9YTUwgdnMgSFRNTCksIG9yIHdoZW4KKyAgICAvLyB3ZSBleGNlZWQgdGhlIG1heGltdW0g
bGVuZ3RoIHRhcmdldC4gQWZ0ZXIgaGl0dGluZyB0aGUgbGVuZ3RoIHRhcmdldCwgd2UgY2FuIG9u
bHkKKyAgICAvLyBzdG9wIGF0IGEgcG9pbnQgd2hlcmUgd2Uga25vdyB3ZSBhcmUgbm90IGluIHRo
ZSBtaWRkbGUgb2YgYSAlLWVzY2FwZSBzZXF1ZW5jZS4gRm9yCisgICAgLy8gdGhlIHNha2Ugb2Yg
c2ltcGxpY2l0eSwgYXBwcm94aW1hdGUgbm90IHN0b3BwaW5nIGluc2lkZSBhIChwb3NzaWJseSBt
dWx0aXBseSBlbmNvZGVkKQorICAgIC8vICUtZXNhY3BlIHNlcXVlbmNlIGJ5IGJyZWFraW5nIG9u
IHdoaXRlc3BhY2Ugb25seS4gV2Ugc2hvdWxkIGhhdmUgZW5vdWdoIHRleHQgaW4KKyAgICAvLyB0
aGVzZSBjYXNlcyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuCiAgICAgZm9yIChmb3VuZFBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbjsgZm91bmRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uOyBmb3VuZFBv
c2l0aW9uKyspIHsKLSAgICAgICAgaWYgKHN0YXJ0c1NpbmdsZUxpbmVDb21tZW50QXQoc3RyaW5n
LCBmb3VuZFBvc2l0aW9uKSB8fCBzdGFydHNNdWx0aUxpbmVDb21tZW50QXQoc3RyaW5nLCBmb3Vu
ZFBvc2l0aW9uKSB8fCBzdGFydHNIVE1MRW5kVGFnQXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSkg
ewotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzdGFydHNIVE1MQ29tbWVudEF0KHN0
cmluZywgZm91bmRQb3NpdGlvbikpIHsKLSAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZm91bmRQ
b3NpdGlvbiArIDQ7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCFtX3Nob3VsZEFs
bG93Q0RBVEEpIHsKKyAgICAgICAgICAgIGlmIChzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0
cmluZywgZm91bmRQb3NpdGlvbikgfHwgc3RhcnRzTXVsdGlMaW5lQ29tbWVudEF0KHN0cmluZywg
Zm91bmRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGZvdW5kUG9z
aXRpb24gKyAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50QXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSkgewor
ICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiArIDQ7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZv
dW5kUG9zaXRpb24gPiBzdGFydFBvc2l0aW9uICsga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdl
dCAmJiBpc0hUTUxTcGFjZShzdHJpbmdbZm91bmRQb3NpdGlvbl0pKSB7CiAgICAgICAgICAgICBl
bmRQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgJKHJldmlzaW9uIDEwNzk3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXJUb2tlbihIVE1MVG9rZW4mKTsKIAogcHJp
dmF0ZToKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJn
ZXQgPSAxMDA7CisKICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgVW5pbml0aWFsaXplZCwKICAg
ICAgICAgSW5pdGlhbCwKQEAgLTg4LDYgKzkwLDggQEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1f
c3RhdGU7CiAgICAgU3RyaW5nIG1fY2FjaGVkU25pcHBldDsKKyAgICBib29sIG1fc2hvdWxkQWxs
b3dDREFUQTsKKyAgICB1bnNpZ25lZCBtX3RhZ05lc3RpbmdMZXZlbDsKICAgICBib29sIG1fbm90
aWZpZWRDbGllbnQ7CiB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDgxMzkpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wMi0x
NyAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KKworICAgICAgICBYU1NBdWRpdG9y
IGJ5cGFzcyB3aXRoIDxzdmc+IHRhZ3MgYW5kIGh0bWwtZW50aXRpZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgzNgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWctZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNp
ZGUtc3ZnLXRhZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzItZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNp
ZGUtc3ZnLXRhZzIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWczLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5z
aWRlLXN2Zy10YWczLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTE3ICBKYW1lcyBSb2JpbnNvbiAg
PGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBVbnJldmlld2VkIC0g
cmVtb3ZpbmcgZXhwZWN0YXRpb25zIGZvciB0ZXN0cyB0aGF0IGNvbnNpc3RlbnRseSBwYXNzLCB1
cGRhdGUgc29tZSBiYXNlbGluZXMgZm9yCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzItZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1p
bnNpZGUtc3ZnLXRhZzItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAK
K0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQu
IFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworIEVuc3VyZXMg
SFRNTCBlbnRpdGllcyBhcmUgcmVjb2duaXplZCBpbiBzY3JpcHQgYmxvY2tzIGluIGEgY29udGV4
dCB3aGVyZSBDREFUQSBpcyBhbGxvd2VkIGV2ZW4gd2l0aCA8IS0tIGNvbW1lbnRzIC0tPi4KSW5k
ZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFn
LWluc2lkZS1zdmctdGFnMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1
ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9s
b2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFn
LnBsP2NsdXR0ZXI9PGRpdj48aT54PC9pPjwvZGl2PiZxPTxzdmc+PHNjcmlwdD48IS0tJnEyPS0t
PiUyNiUyNHgwYTthbGVydCUyNiUyM3gyOTtTdHJpbmcuZnJvbUNoYXJDb2RlKDB4NTgsMHg1Myww
eDUzKSk8L3N2Zz48L3NjcmlwdD4iPgorPC9pZnJhbWU+CitFbnN1cmVzIEhUTUwgZW50aXRpZXMg
YXJlIHJlY29nbml6ZWQgaW4gc2NyaXB0IGJsb2NrcyBpbiBhIGNvbnRleHQgd2hlcmUgQ0RBVEEg
aXMgYWxsb3dlZCBldmVuIHdpdGggJmx0OyEtLSBjb21tZW50cyAtLSZndDsuCis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lk
ZS1zdmctdGFnMy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK0NPTlNPTEUgTUVTU0FHRTog
UmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNj
cmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2VkIHRv
IGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5k
IHdpdGhpbiByZXF1ZXN0LgorCisgRW5zdXJlcyBIVE1MIGVudGl0aWVzIGFyZSByZWNvZ25pemVk
IGluIHNjcmlwdCBibG9ja3MgaW4gYSBjb250ZXh0IHdoZXJlIENEQVRBIGlzIGFsbG93ZWQgZXZl
biB3aXRoIDwhLS0gY29tbWVudHMgLS0+LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWczLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctaW5zaWRlLXN2Zy10YWczLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJv
bGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1
ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1dHRlcj08c2NyaXB0PmFsZXJ0KDEp
PC9zY3JpcHQ+JnE9PHN2Zz48c2NyaXB0PiZxMj1hbGVydCgwKTs8L3NjcmlwdD48L3N2Zz4iPgor
PC9pZnJhbWU+CitFbnN1cmVzIEhUTUwgZW50aXRpZXMgYXJlIHJlY29nbml6ZWQgaW4gc2NyaXB0
IGJsb2NrcyBpbiBhIGNvbnRleHQgd2hlcmUgQ0RBVEEgaXMgYWxsb3dlZCBldmVuIHdpdGggJmx0
OyEtLSBjb21tZW50cyAtLSZndDsuCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRh
Zy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWctZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMgQEAKK0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNj
cmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4K
KworIEVuc3VyZXMgSFRNTCBlbnRpdGllcyBhcmUgcmVjb2duaXplZCBpbiBzY3JpcHQgYmxvY2tz
IGluIGEgY29udGV4dCB3aGVyZSBDREFUQSBpcyBhbGxvd2VkLgpJbmRleDogTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1
ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRl
LXN2Zy10YWcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3Vy
aXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/cT08c3ZnPjxzY3JpcHQ+
Ly8lMjYlMjR4MGE7YWxlcnQlMjYlMjN4Mjk7U3RyaW5nLmZyb21DaGFyQ29kZSgweDU4LDB4NTMs
MHg1MykpPC9zdmc+PC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorRW5zdXJlcyBIVE1MIGVudGl0aWVz
IGFyZSByZWNvZ25pemVkIGluIHNjcmlwdCBibG9ja3MgaW4gYSBjb250ZXh0IHdoZXJlIENEQVRB
IGlzIGFsbG93ZWQuCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128037</attachid>
            <date>2012-02-21 13:53:38 -0800</date>
            <delta_ts>2012-02-22 12:54:14 -0800</delta_ts>
            <desc>Patch for initial review (needs more testing before commit).</desc>
            <filename>patch_78836.txt</filename>
            <type>text/plain</type>
            <size>23394</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAyLTIxICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTU0F1ZGl0b3IgYnlwYXNzIHdp
dGggPHN2Zz4gdGFncyBhbmQgaHRtbC1lbnRpdGllcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pZnJhbWUtb25sb2FkLWluLXN2Zy10YWcuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcuaHRtbAor
ICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
aW5zaWRlLXN2Zy10YWcyLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy5odG1sCisKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9uQ2Fub25p
Y2FsQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGVybWluYXRpbmdDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydHNIVE1MQ29tbWVu
dEF0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0c1NpbmdsZUxpbmVDb21tZW50QXQpOgorICAg
ICAgICAoV2ViQ29yZTo6ZnVsbHlEZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6WFNTQXVkaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjppbml0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclN0YXJ0VG9rZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6WFNTQXVkaXRvcjo6ZmlsdGVyRW5kVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyQ2hhcmFjdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRv
cjo6ZmlsdGVyU2NyaXB0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyT2JqZWN0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyUGFy
YW1Ub2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJFbWJlZFRva2Vu
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjpmaWx0ZXJCYXNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyRm9ybVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRl
Y29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OnNuaXBwZXRGb3JKYXZhU2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9y
Lmg6CisgICAgICAgIChYU1NBdWRpdG9yKToKKwogMjAxMi0wMi0yMSAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyBzaG91bGQgYmUgY29uZGl0aW9uYWwgb24g
Y29tcG9zaXRpbmcgYmVpbmcgYWN0aXZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9YU1NBdWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9YU1NBdWRpdG9yLmNwcAkocmV2aXNpb24gMTA3OTc4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBh
cnNlci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIu
aCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC01NCw3ICs1NSw3IEBAIHN0
YXRpYyBib29sIGlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKFVDaGEKICAgICAvLyBXZSByZW1vdmUg
YWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgbm9uLXByaW50YWJsZSBBU0NJSSBj
aGFyYWN0ZXJzLgogICAgIC8vCiAgICAgLy8gTm90ZSwgd2UgZG9uJ3QgcmVtb3ZlIGJhY2tzbGFz
aGVzIGxpa2UgUEhQIHN0cmlwc2xhc2hlcygpLCB3aGljaCBhbW9uZyBvdGhlciB0aGluZ3MgY29u
dmVydHMgIlxcMCIgdG8gdGhlIFwwIGNoYXJhY3Rlci4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZW1v
dmUgYmFja3NsYXNoZXMgYW5kIHplcm9zIChzaW5jZSB0aGUgc3RyaW5nICJcXDAiID0ocmVtb3Zl
IGJhY2tzbGFzaGVzKT0+ICIwIikuIEhvd2V2ZXIsIHRoaXMgaGFzIHRoZSAKKyAgICAvLyBJbnN0
ZWFkLCB3ZSByZW1vdmUgYmFja3NsYXNoZXMgYW5kIHplcm9zIChzaW5jZSB0aGUgc3RyaW5nICJc
XDAiID0ocmVtb3ZlIGJhY2tzbGFzaGVzKT0+ICIwIikuIEhvd2V2ZXIsIHRoaXMgaGFzIHRoZQog
ICAgIC8vIGFkdmVyc2UgZWZmZWN0IHRoYXQgd2UgcmVtb3ZlIGFueSBsZWdpdGltYXRlIHplcm9z
IGZyb20gYSBzdHJpbmcuCiAgICAgLy8KICAgICAvLyBGb3IgaW5zdGFuY2U6IG5ldyBTdHJpbmco
Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIpID0+IG5ldyBTdHJpbmcoImh0dHA6Ly9sb2NhbGhvc3Q6
OCIpLgpAQCAtNzEsNyArNzIsNyBAQCBzdGF0aWMgYm9vbCBpc1JlcXVpcmVkRm9ySW5qZWN0aW9u
KFVDaGFyCiAgICAgcmV0dXJuIChjID09ICdcJycgfHwgYyA9PSAnIicgfHwgYyA9PSAnPCcgfHwg
YyA9PSAnPicpOwogfQogCi1zdGF0aWMgYm9vbCBpc1Rlcm1pbmF0aW5nQ2hhcmFjdGVyKFVDaGFy
IGMpIAorc3RhdGljIGJvb2wgaXNUZXJtaW5hdGluZ0NoYXJhY3RlcihVQ2hhciBjKQogewogICAg
IHJldHVybiAoYyA9PSAnJicgfHwgYyA9PSAnLycgfHwgYyA9PSAnIicgfHwgYyA9PSAnXCcnIHx8
IGMgPT0gJzwnKTsKIH0KQEAgLTg3LDIxICs4OCwxNSBAQCBzdGF0aWMgYm9vbCBpc0pTTmV3bGlu
ZShVQ2hhciBjKQogICAgIHJldHVybiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09IDB4
MjAyOCB8fCBjID09IDB4MjAyOSk7CiB9CiAKLXN0YXRpYyBib29sIHN0YXJ0c0hUTUxFbmRUYWdB
dChjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQotewotICAgIHJldHVybiAoc3Rh
cnQgKyAxIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1tzdGFydF0gPT0gJzwnICYmIHN0cmlu
Z1tzdGFydCsxXSA9PSAnLycpOwotfSAgICAKLQotCiBzdGF0aWMgYm9vbCBzdGFydHNIVE1MQ29t
bWVudEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnQpCiB7CiAgICAgcmV0dXJu
IChzdGFydCArIDMgPCBzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nW3N0YXJ0XSA9PSAnPCcgJiYg
c3RyaW5nW3N0YXJ0KzFdID09ICchJyAmJiBzdHJpbmdbc3RhcnQrMl0gPT0gJy0nICYmIHN0cmlu
Z1tzdGFydCszXSA9PSAnLScpOwotfSAgICAKK30KIAogc3RhdGljIGJvb2wgc3RhcnRzU2luZ2xl
TGluZUNvbW1lbnRBdChjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQogewogICAg
IHJldHVybiAoc3RhcnQgKyAxIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1tzdGFydF0gPT0g
Jy8nICYmIHN0cmluZ1tzdGFydCsxXSA9PSAnLycpOwotfSAgICAKK30KIAogc3RhdGljIGJvb2wg
c3RhcnRzTXVsdGlMaW5lQ29tbWVudEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3Rh
cnQpCiB7CkBAIC0xNzcsNyArMTcyLDYgQEAgc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmlu
Zyhjb25zdCBTdAogICAgICAgICBvbGRXb3JraW5nU3RyaW5nTGVuZ3RoID0gd29ya2luZ1N0cmlu
Zy5sZW5ndGgoKTsKICAgICAgICAgd29ya2luZ1N0cmluZyA9IGRlY29kZTE2Qml0VW5pY29kZUVz
Y2FwZVNlcXVlbmNlcyhkZWNvZGVTdGFuZGFyZFVSTEVzY2FwZVNlcXVlbmNlcyh3b3JraW5nU3Ry
aW5nLCBlbmNvZGluZykpOwogICAgIH0gd2hpbGUgKHdvcmtpbmdTdHJpbmcubGVuZ3RoKCkgPCBv
bGRXb3JraW5nU3RyaW5nTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXdvcmtpbmdTdHJpbmcuaXNFbXB0
eSgpKTsKICAgICB3b3JraW5nU3RyaW5nLnJlcGxhY2UoJysnLCAnICcpOwogICAgIHdvcmtpbmdT
dHJpbmcgPSBjYW5vbmljYWxpemUod29ya2luZ1N0cmluZyk7CiAgICAgcmV0dXJuIHdvcmtpbmdT
dHJpbmc7CkBAIC0xODgsNiArMTgyLDggQEAgWFNTQXVkaXRvcjo6WFNTQXVkaXRvcihIVE1MRG9j
dW1lbnRQYXJzZQogICAgICwgbV9pc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3hzc1Byb3RlY3Rp
b24oWFNTUHJvdGVjdGlvbkVuYWJsZWQpCiAgICAgLCBtX3N0YXRlKFVuaW5pdGlhbGl6ZWQpCisg
ICAgLCBtX3Nob3VsZEFsbG93Q0RBVEEoZmFsc2UpCisgICAgLCBtX3NjcmlwdFRhZ05lc3RpbmdM
ZXZlbCgwKQogICAgICwgbV9ub3RpZmllZENsaWVudChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9w
YXJzZXIpOwpAQCAtMjA1LDcgKzIwMSw3IEBAIHZvaWQgWFNTQXVkaXRvcjo6aW5pdCgpCiAgICAg
Y29uc3QgaW50IHN1ZmZpeFRyZWVEZXB0aCA9IDU7CiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBV
bmluaXRpYWxpemVkKTsKLSAgICBtX3N0YXRlID0gSW5pdGlhbDsKKyAgICBtX3N0YXRlID0gSW5p
dGlhbGl6ZWQ7CiAKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0y
NTgsMjggKzI1NCwyMSBAQCB2b2lkIFhTU0F1ZGl0b3I6OmluaXQoKQogCiB2b2lkIFhTU0F1ZGl0
b3I6OmZpbHRlclRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgaWYgKG1fc3RhdGUgPT0g
VW5pbml0aWFsaXplZCkgeworICAgIGlmIChtX3N0YXRlID09IFVuaW5pdGlhbGl6ZWQpCiAgICAg
ICAgIGluaXQoKTsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gSW5pdGlhbCk7Ci0gICAgfQot
CisgICAKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsaXplZCk7CiAgICAgaWYgKCFtX2lz
RW5hYmxlZCB8fCBtX3hzc1Byb3RlY3Rpb24gPT0gWFNTUHJvdGVjdGlvbkRpc2FibGVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIFVuaW5pdGlhbGl6ZWQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluaXRpYWw6Ci0gICAg
ICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVyVG9rZW5Jbml0aWFsKHRva2VuKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBZnRlclNjcmlwdFN0YXJ0VGFnOgotICAgICAgICBkaWRCbG9ja1Nj
cmlwdCA9IGZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyh0b2tlbik7Ci0gICAgICAgIEFT
U0VSVChtX3N0YXRlID09IEluaXRpYWwpOwotICAgICAgICBtX2NhY2hlZFNuaXBwZXQgPSBTdHJp
bmcoKTsKLSAgICAgICAgYnJlYWs7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5U
eXBlczo6U3RhcnRUYWcpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVyU3RhcnRUb2tl
bih0b2tlbik7CisgICAgZWxzZSBpZiAobV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwpIHsKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKQorICAgICAg
ICAgICAgZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJDaGFyYWN0ZXJUb2tlbih0b2tlbik7CisgICAg
ICAgIGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKQorICAg
ICAgICAgICAgZmlsdGVyRW5kVG9rZW4odG9rZW4pOwogICAgIH0KIAogICAgIGlmIChkaWRCbG9j
a1NjcmlwdCkgewpAQCAtMzAxLDE4ICsyOTAsMTUgQEAgdm9pZCBYU1NBdWRpdG9yOjpmaWx0ZXJU
b2tlbihIVE1MVG9rZW4mIAogICAgIH0KIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tl
bkluaXRpYWwoSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU3RhcnRU
b2tlbihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwp
OwotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBlcmFzZURh
bmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKHRva2VuKTsKIAotICAgIGlmIChoYXNOYW1lKHRv
a2VuLCBzY3JpcHRUYWcpKQorICAgIGlmIChoYXNOYW1lKHRva2VuLCBzY3JpcHRUYWcpKSB7CiAg
ICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlclNjcmlwdFRva2VuKHRva2VuKTsKLSAgICBl
bHNlIGlmIChoYXNOYW1lKHRva2VuLCBvYmplY3RUYWcpKQorICAgICAgICBBU1NFUlQobV9zaG91
bGRBbGxvd0NEQVRBIHx8ICFtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CisgICAgICAgIG1fc2Ny
aXB0VGFnTmVzdGluZ0xldmVsKys7CisgICAgfSBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBvYmpl
Y3RUYWcpKQogICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJPYmplY3RUb2tlbih0b2tl
bik7CiAgICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgcGFyYW1UYWcpKQogICAgICAgICBkaWRC
bG9ja1NjcmlwdCB8PSBmaWx0ZXJQYXJhbVRva2VuKHRva2VuKTsKQEAgLTMzMiwxNiArMzE4LDE4
IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW5Jbml0aWFsKEhUTUwKICAgICByZXR1cm4g
ZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW5BZnRlclNj
cmlwdFN0YXJ0VGFnKEhUTUxUb2tlbiYgdG9rZW4pCit2b2lkIFhTU0F1ZGl0b3I6OmZpbHRlckVu
ZFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gQWZ0ZXJT
Y3JpcHRTdGFydFRhZyk7Ci0gICAgbV9zdGF0ZSA9IEluaXRpYWw7Ci0KLSAgICBpZiAodG9rZW4u
dHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpIHsKLSAgICAgICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnIHx8IHRva2VuLnR5cGUoKSA9PSBI
VE1MVG9rZW5UeXBlczo6RW5kT2ZGaWxlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVChtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CisgICAgaWYgKGhhc05hbWUodG9rZW4sIHNj
cmlwdFRhZykpIHsKKyAgICAgICAgbV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwtLTsKKyAgICAgICAg
QVNTRVJUKG1fc2hvdWxkQWxsb3dDREFUQSB8fCAhbV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwpOwog
ICAgIH0KK30KIAorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9r
ZW4mIHRva2VuKQoreworICAgIEFTU0VSVChtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CiAgICAg
VGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlciA9IG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNv
ZGVyKCk7CiAgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKG1f
Y2FjaGVkU25pcHBldCwgZGVjb2RlcikpKSB7CiAgICAgICAgIGludCBzdGFydCA9IDA7CkBAIC0z
NTgsMjEgKzM0NiwxOSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRT
CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4oSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9r
ZW4sIHNjcmlwdFRhZykpOwogCiAgICAgaWYgKGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tl
biwgc3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9zdGF0ZSA9IEFmdGVyU2NyaXB0U3RhcnRUYWc7CiAg
ICAgbV9jYWNoZWRTbmlwcGV0ID0gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKTsKKyAg
ICBtX3Nob3VsZEFsbG93Q0RBVEEgPSBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNob3VsZEFsbG93
Q0RBVEEoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
T2JqZWN0VG9rZW4oSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJ
bml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIG9iamVjdFRhZykpOwogCkBAIC0zODcs
NyArMzczLDYgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbihIVE1MVAogCiBi
b29sIFhTU0F1ZGl0b3I6OmZpbHRlclBhcmFtVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKIHsKLSAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIHBh
cmFtVGFnKSk7CiAKQEAgLTQwNiw3ICszOTEsNiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclBh
cmFtVG9rZW4oSFRNTFRvCiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1M
VG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwpOwogICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NF
UlQoaGFzTmFtZSh0b2tlbiwgZW1iZWRUYWcpKTsKIApAQCAtNDIxLDcgKzQwNSw2IEBAIGJvb2wg
WFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1MVG8KIAogYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJBcHBsZXRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRl
ID09IEluaXRpYWwpOwogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6
OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYXBwbGV0VGFnKSk7CiAKQEAg
LTQzNSw3ICs0MTgsNiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKEhUTUxU
CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4oSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9r
ZW4sIGlmcmFtZVRhZykpOwogCkBAIC00NDQsNyArNDI2LDYgQEAgYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJJZnJhbWVUb2tlbihIVE1MVAogCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tl
bihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwpOwog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAg
ICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgbWV0YVRhZykpOwogCkBAIC00NTMsNyArNDM0LDYgQEAg
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJNZXRhVG9rZW4oSFRNTFRvawogCiBib29sIFhTU0F1ZGl0
b3I6OmZpbHRlckJhc2VUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0
YXRlID09IEluaXRpYWwpOwogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYmFzZVRhZykpOwogCkBA
IC00NjIsNyArNDQyLDYgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJCYXNlVG9rZW4oSFRNTFRv
awogCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckZvcm1Ub2tlbihIVE1MVG9rZW4mIHRva2VuKQog
ewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwpOwogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tl
biwgZm9ybVRhZykpOwogCkBAIC01NDEsOCArNTIwLDYgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OnNu
aXBwZXRGb3JSYW5nZShjb25zdAogCiBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRG
b3JBdHRyaWJ1dGUoY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgSFRNTFRva2VuOjpBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQpCiB7Ci0gICAgY29uc3Qg
c2l6ZV90IGtNYXhpbXVtU25pcHBldExlbmd0aCA9IDEwMDsKLQogICAgIC8vIFRoZSByYW5nZSBk
b2Vzbid0IGlubGN1ZGUgdGhlIGNoYXJhY3RlciB3aGljaCB0ZXJtaW5hdGVzIHRoZSB2YWx1ZS4g
U28sCiAgICAgLy8gZm9yIGFuIGlucHV0IG9mIHxuYW1lPSJ2YWx1ZSJ8LCB0aGUgc25pcHBldCBp
cyB8bmFtZT0idmFsdWV8LiBGb3IgYW4KICAgICAvLyB1bnF1b3RlZCBpbnB1dCBvZiB8bmFtZT12
YWx1ZSB8LCB0aGUgc25pcHBldCBpcyB8bmFtZT12YWx1ZXwuCkBAIC01NTAsNyArNTI3LDcgQEAg
U3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cgogICAgIGludCBzdGFydCA9
IGF0dHJpYnV0ZS5tX25hbWVSYW5nZS5tX3N0YXJ0IC0gdG9rZW4uc3RhcnRJbmRleCgpOwogICAg
IGludCBlbmQgPSBhdHRyaWJ1dGUubV92YWx1ZVJhbmdlLm1fZW5kIC0gdG9rZW4uc3RhcnRJbmRl
eCgpOwogICAgIFN0cmluZyBkZWNvZGVkU25pcHBldCA9IGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBw
ZXRGb3JSYW5nZSh0b2tlbiwgc3RhcnQsIGVuZCksIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNv
ZGVyKCkpOwotICAgIGRlY29kZWRTbmlwcGV0LnRydW5jYXRlKGtNYXhpbXVtU25pcHBldExlbmd0
aCk7CisgICAgZGVjb2RlZFNuaXBwZXQudHJ1bmNhdGUoa01heGltdW1GcmFnbWVudExlbmd0aFRh
cmdldCk7CiAgICAgaWYgKHRyZWF0bWVudCA9PSBTcmNMaWtlQXR0cmlidXRlKSB7CiAgICAgICAg
IGludCBzbGFzaENvdW50OwogICAgICAgICBzaXplX3QgY3VycmVudExlbmd0aDsKQEAgLTU5Myw4
ICs1NzAsNiBAQCBib29sIFhTU0F1ZGl0b3I6OmlzU2FtZU9yaWdpblJlc291cmNlKGNvCiAKIFN0
cmluZyBYU1NBdWRpdG9yOjpzbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIHsKLSAgICBjb25zdCBzaXplX3Qga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEw
MDsKLQogICAgIHNpemVfdCBzdGFydFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5kUG9zaXRp
b24gPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90IGZvdW5kUG9zaXRpb24gPSBub3RGb3Vu
ZDsKQEAgLTYwMyw2ICs1NzgsMTUgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OnNuaXBwZXRGb3JKYXZh
U2NyaXB0KAogICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pIHsKICAgICAg
ICAgd2hpbGUgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiAmJiBpc0hUTUxTcGFjZShzdHJp
bmdbc3RhcnRQb3NpdGlvbl0pKQogICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOworCisgICAg
ICAgIC8vIFVuZGVyIFNWRy9YTUwgcnVsZXMsIG9ubHkgSFRNTCBjb21tZW50IHN5bnRheCBtYXR0
ZXJzIGFuZCB0aGUgcGFyc2VyIHJldHVybnMKKyAgICAgICAgLy8gdGhlc2UgYXMgYSBzZXBhcmF0
ZSBjb21tZW50IHRva2Vucy4gSGF2aW5nIGNvbnN1bWVkIHdoaXRlc3BhY2UsIHdlIG5lZWQgbm90
IGxvb2sKKyAgICAgICAgLy8gZnVydGhlciBmb3IgdGhlc2UuCisgICAgICAgIGlmIChtX3Nob3Vs
ZEFsbG93Q0RBVEEpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLy8gVW5kZXIgSFRNTCBy
dWxlcywgYm90aCB0aGUgSFRNTCBhbmQgSlMgY29tbWVudCBzeW5hdHggbWF0dGVycywgYW5kIHRo
ZSBIVE1MCisgICAgICAgIC8vIGNvbW1lbnQgZW5kcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCBu
b3Qgd2l0aCAtLT4uCiAgICAgICAgIGlmIChzdGFydHNIVE1MQ29tbWVudEF0KHN0cmluZywgc3Rh
cnRQb3NpdGlvbikgfHwgc3RhcnRzU2luZ2xlTGluZUNvbW1lbnRBdChzdHJpbmcsIHN0YXJ0UG9z
aXRpb24pKSB7CiAgICAgICAgICAgICB3aGlsZSAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9u
ICYmICFpc0pTTmV3bGluZShzdHJpbmdbc3RhcnRQb3NpdGlvbl0pKQogICAgICAgICAgICAgICAg
IHN0YXJ0UG9zaXRpb24rKzsKQEAgLTYxNSwyOSArNTk5LDI5IEBAIFN0cmluZyBYU1NBdWRpdG9y
OjpzbmlwcGV0Rm9ySmF2YVNjcmlwdCgKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IC8vIFN0b3AgYXQgbmV4dCBjb21tZW50LCBvciBhdCBhIGNsb3Npbmcgc2NyaXB0IHRhZyAod2hp
Y2ggbWF5IGhhdmUgYmVlbiBpbmNsdWRlZCB3aXRoCi0gICAgLy8gdGhlIGNvZGUgZnJhZ21lbnQg
YmVjYXVzZSBvZiBidWZmZXJpbmcgaW4gdGhlIEhUTUxTb3VyY2VUcmFja2VyKSwgb3Igd2hlbiB3
ZSBleGNlZWQKLSAgICAvLyB0aGUgbWF4aW11bSBsZW5ndGggdGFyZ2V0LiBBZnRlciBoaXR0aW5n
IHRoZSBsZW5ndGggdGFyZ2V0LCB3ZSBjYW4gb25seSBzdG9wIGF0IGEKLSAgICAvLyBwb2ludCB3
aGVyZSB3ZSBrbm93IHdlIGFyZSBub3QgaW4gdGhlIG1pZGRsZSBvZiBhICUtZXNjYXBlIHNlcXVl
bmNlLiBGb3IgdGhlIHNha2Ugb2YKLSAgICAvLyBzaW1wbGljaXR5LCBhcHByb3hpbWF0ZSBzdG9w
cGluZyBhdCBhIGNsb3NlIHNjcmlwdCB0YWcgYnkgc3RvcHBpbmcgYXQgYW55IGNsb3NlIHRhZywK
LSAgICAvLyBhbmQgYXBwcm94aW1hdGUgbm90IHN0b3BwaW5nIGluc2lkZSBhIChwb3NzaWJseSBt
dWx0aXBseSBlbmNvZGVkKSAlLWVzYWNwZSBzZXF1ZW5jZQotICAgIC8vIGJ5IGJyZWFraW5nIG9u
IHdoaXRlc3BhY2Ugb25seS4gV2Ugc2hvdWxkIGhhdmUgZW5vdWdoIHRleHQgaW4gdGhlc2UgY2Fz
ZXMgdG8gYXZvaWQKLSAgICAvLyBmYWxzZSBwb3NpdGl2ZXMuCisgICAgLy8gU3RvcCBhdCBuZXh0
IGNvbW1lbnQgKHVzaW5nIHRoZSBzYW1lIHJ1bGVzIGFzIGFib3ZlIGZvciBTVkcvWE1MIHZzIEhU
TUwpLCBvciB3aGVuCisgICAgLy8gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGxlbmd0aCB0YXJnZXQu
IEFmdGVyIGhpdHRpbmcgdGhlIGxlbmd0aCB0YXJnZXQsIHdlIGNhbiBvbmx5CisgICAgLy8gc3Rv
cCBhdCBhIHBvaW50IHdoZXJlIHdlIGtub3cgd2UgYXJlIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEg
JS1lc2NhcGUgc2VxdWVuY2UuIEZvcgorICAgIC8vIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksIGFw
cHJveGltYXRlIG5vdCBzdG9wcGluZyBpbnNpZGUgYSAocG9zc2libHkgbXVsdGlwbHkgZW5jb2Rl
ZCkKKyAgICAvLyAlLWVzYWNwZSBzZXF1ZW5jZSBieSBicmVha2luZyBvbiB3aGl0ZXNwYWNlIG9u
bHkuIFdlIHNob3VsZCBoYXZlIGVub3VnaCB0ZXh0IGluCisgICAgLy8gdGhlc2UgY2FzZXMgdG8g
YXZvaWQgZmFsc2UgcG9zaXRpdmVzLgogICAgIGZvciAoZm91bmRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb247IGZvdW5kUG9zaXRpb24gPCBlbmRQb3NpdGlvbjsgZm91bmRQb3NpdGlvbisrKSB7Ci0g
ICAgICAgIGlmIChzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0cmluZywgZm91bmRQb3NpdGlv
bikgfHwgc3RhcnRzTXVsdGlMaW5lQ29tbWVudEF0KHN0cmluZywgZm91bmRQb3NpdGlvbikgfHwg
c3RhcnRzSFRNTEVuZFRhZ0F0KHN0cmluZywgZm91bmRQb3NpdGlvbikpIHsKLSAgICAgICAgICAg
IGVuZFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiArIDI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoc3RhcnRzSFRNTENvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9z
aXRpb24pKSB7Ci0gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb24gKyA0Owot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICghbV9zaG91bGRBbGxvd0NEQVRBKSB7Cisg
ICAgICAgICAgICBpZiAoc3RhcnRzU2luZ2xlTGluZUNvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9z
aXRpb24pIHx8IHN0YXJ0c011bHRpTGluZUNvbW1lbnRBdChzdHJpbmcsIGZvdW5kUG9zaXRpb24p
KSB7CisgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdGFy
dHNIVE1MQ29tbWVudEF0KHN0cmluZywgZm91bmRQb3NpdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICBlbmRQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb24gKyA0OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmIChmb3VuZFBvc2l0aW9uID4g
c3RhcnRQb3NpdGlvbiArIGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQgJiYgaXNIVE1MU3Bh
Y2Uoc3RyaW5nW2ZvdW5kUG9zaXRpb25dKSkgewogICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBm
b3VuZFBvc2l0aW9uOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
CisKICAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlv
biAtIHN0YXJ0UG9zaXRpb24pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9YU1NBdWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
WFNTQXVkaXRvci5oCShyZXZpc2lvbiAxMDc5NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9YU1NBdWRpdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEwICs0MiwxMSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBmaWx0ZXJUb2tlbihIVE1MVG9rZW4mKTsKIAogcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQgPSAxMDA7CisK
ICAgICBlbnVtIFN0YXRlIHsKICAgICAgICAgVW5pbml0aWFsaXplZCwKLSAgICAgICAgSW5pdGlh
bCwKLSAgICAgICAgQWZ0ZXJTY3JpcHRTdGFydFRhZywKKyAgICAgICAgSW5pdGlhbGl6ZWQKICAg
ICB9OwogCiAgICAgZW51bSBBdHRyaWJ1dGVLaW5kIHsKQEAgLTU1LDkgKzU2LDkgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgaW5pdCgpOwogCi0gICAgYm9vbCBmaWx0ZXJUb2tlbkluaXRpYWwoSFRN
TFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJUb2tlbkFmdGVyU2NyaXB0U3RhcnRUYWcoSFRNTFRv
a2VuJik7Ci0KKyAgICBib29sIGZpbHRlclN0YXJ0VG9rZW4oSFRNTFRva2VuJik7CisgICAgdm9p
ZCBmaWx0ZXJFbmRUb2tlbihIVE1MVG9rZW4mKTsKKyAgICBib29sIGZpbHRlckNoYXJhY3RlclRv
a2VuKEhUTUxUb2tlbiYpOwogICAgIGJvb2wgZmlsdGVyU2NyaXB0VG9rZW4oSFRNTFRva2VuJik7
CiAgICAgYm9vbCBmaWx0ZXJPYmplY3RUb2tlbihIVE1MVG9rZW4mKTsKICAgICBib29sIGZpbHRl
clBhcmFtVG9rZW4oSFRNTFRva2VuJik7CkBAIC04OCw2ICs4OSw4IEBAIHByaXZhdGU6CiAKICAg
ICBTdGF0ZSBtX3N0YXRlOwogICAgIFN0cmluZyBtX2NhY2hlZFNuaXBwZXQ7CisgICAgYm9vbCBt
X3Nob3VsZEFsbG93Q0RBVEE7CisgICAgdW5zaWduZWQgbV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWw7
CiAgICAgYm9vbCBtX25vdGlmaWVkQ2xpZW50OwogfTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA4
Mzk0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMTItMDItMjEgIFRvbSBTZXBleiAgPHRzZXBlekBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgWFNTQXVkaXRvciBieXBhc3Mgd2l0aCA8c3ZnPiB0YWdzIGFuZCBodG1sLWVudGl0aWVz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzg4MzYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGh0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLWluLXN2Zy10YWctZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
aWZyYW1lLW9ubG9hZC1pbi1zdmctdGFnLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctaW5zaWRlLXN2Zy10YWcuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcyLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Nj
cmlwdC10YWctaW5zaWRlLXN2Zy10YWcyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy5odG1sOiBBZGRlZC4KKwogMjAxMi0wMi0yMSAgQ3Nh
YmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF0gVW5yZXZp
ZXdlZCBnYXJkZW5pbmcuIFR5cG8gZml4LgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtaW4tc3ZnLXRhZy1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L2lmcmFtZS1vbmxvYWQtaW4tc3ZnLXRhZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1p
bi1zdmctdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05T
T0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3Vy
Y2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKyBUZXN0IHRoYXQgZGFu
Z2Vyb3VzIGF0dHJpYnV0ZXMgYXJlIHN0aWxsIGZpbHRlcmVkIGluIG5ldHN0ZWQgc2NyaXB0IGNv
bnRleHRzLgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L2lmcmFtZS1vbmxvYWQtaW4tc3ZnLXRhZy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2FkLWluLXN2Zy10YWcu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNz
QXVkaXRvci9pZnJhbWUtb25sb2FkLWluLXN2Zy10YWcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuc2V0WFNTQXVkaXRvckVu
YWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9
Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hv
LWludGVydGFnLnBsP3E9PHN2Zz48c2NyaXB0PjxpZnJhbWUlMjBvbmxvYWQ9YWxlcnQoMCk+PC9p
ZnJhbWU+PC9zY3JpcHQ+PC9zdmc+Ij4KKzwvaWZyYW1lPgorVGVzdCB0aGF0IGRhbmdlcm91cyBh
dHRyaWJ1dGVzIGFyZSBzdGlsbCBmaWx0ZXJlZCBpbiBuZXRzdGVkIHNjcmlwdCBjb250ZXh0cy4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMi1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctaW5zaWRlLXN2Zy10YWcyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1z
dmctdGFnMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQ09OU09M
RSBNRVNTQUdFOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNl
IGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisgRW5zdXJlcyBIVE1MIGVu
dGl0aWVzIGFyZSByZWNvZ25pemVkIGluIHNjcmlwdCBibG9ja3MgaW4gYSBjb250ZXh0IHdoZXJl
IENEQVRBIGlzIGFsbG93ZWQgZXZlbiB3aXRoIDwhLS0gY29tbWVudHMgLS0+LgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRl
LXN2Zy10YWcyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy1pbnNpZGUtc3ZnLXRhZzIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9yRW5hYmxlZCh0cnVlKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNyYz0iaHR0cDovL2xvY2FsaG9z
dDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2VjaG8taW50ZXJ0YWcucGw/Y2x1
dHRlcj08ZGl2PjxpPng8L2k+PC9kaXY+JnE9PHN2Zz48c2NyaXB0PjwhLS0mcTI9LS0+JTI2JTI0
eDBhO2FsZXJ0JTI2JTIzeDI5O1N0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMpKTwv
c3ZnPjwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KK0Vuc3VyZXMgSFRNTCBlbnRpdGllcyBhcmUgcmVj
b2duaXplZCBpbiBzY3JpcHQgYmxvY2tzIGluIGEgY29udGV4dCB3aGVyZSBDREFUQSBpcyBhbGxv
d2VkIGV2ZW4gd2l0aCAmbHQ7IS0tIGNvbW1lbnRzIC0tJmd0Oy4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLWluc2lkZS1zdmctdGFnMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10
YWczLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMv
c2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2Vk
IHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNjcmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZv
dW5kIHdpdGhpbiByZXF1ZXN0LgorCitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0
ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGlu
IHJlcXVlc3QuCisKKyBFbnN1cmVzIEhUTUwgZW50aXRpZXMgYXJlIHJlY29nbml6ZWQgaW4gc2Ny
aXB0IGJsb2NrcyBpbiBhIGNvbnRleHQgd2hlcmUgQ0RBVEEgaXMgYWxsb3dlZCBldmVuIHdpdGgg
bmVzdGVkIHNjcmlwdCBibG9ja3MuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3Vy
aXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzMuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRh
Zy1pbnNpZGUtc3ZnLXRhZzMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVy
LnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRv
ci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9jbHV0dGVyPTxzY3JpcHQ+YWxlcnQoMSk8L3Nj
cmlwdD4mcT08c3ZnPjxzY3JpcHQ+JnEyPWFsZXJ0KDApOzwvc2NyaXB0Pjwvc3ZnPiI+Cis8L2lm
cmFtZT4KK0Vuc3VyZXMgSFRNTCBlbnRpdGllcyBhcmUgcmVjb2duaXplZCBpbiBzY3JpcHQgYmxv
Y2tzIGluIGEgY29udGV4dCB3aGVyZSBDREFUQSBpcyBhbGxvd2VkIGV2ZW4gd2l0aCBuZXN0ZWQg
c2NyaXB0IGJsb2Nrcy4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hz
c0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0
LXRhZy1pbnNpZGUtc3ZnLXRhZy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2VkIHRvIGV4ZWN1dGUgYSBKYXZhU2NyaXB0IHNj
cmlwdC4gU291cmNlIGNvZGUgb2Ygc2NyaXB0IGZvdW5kIHdpdGhpbiByZXF1ZXN0LgorCisgRW5z
dXJlcyBIVE1MIGVudGl0aWVzIGFyZSByZWNvZ25pemVkIGluIHNjcmlwdCBibG9ja3MgaW4gYSBj
b250ZXh0IHdoZXJlIENEQVRBIGlzIGFsbG93ZWQuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9z
Y3JpcHQtdGFnLWluc2lkZS1zdmctdGFnLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRh
Zy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgIGxheW91dFRlc3RDb250
cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkveHNz
QXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9xPTxzdmc+PHNjcmlwdD4vLyUyNiUy
NHgwYTthbGVydCUyNiUyM3gyOTtTdHJpbmcuZnJvbUNoYXJDb2RlKDB4NTgsMHg1MywweDUzKSk8
L3N2Zz48L3NjcmlwdD4iPgorPC9pZnJhbWU+CitFbnN1cmVzIEhUTUwgZW50aXRpZXMgYXJlIHJl
Y29nbml6ZWQgaW4gc2NyaXB0IGJsb2NrcyBpbiBhIGNvbnRleHQgd2hlcmUgQ0RBVEEgaXMgYWxs
b3dlZC4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="130315"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128269</attachid>
            <date>2012-02-22 12:54:14 -0800</date>
            <delta_ts>2012-02-22 14:21:00 -0800</delta_ts>
            <desc>Patch + indent fix.</desc>
            <filename>patch_78836.txt</filename>
            <type>text/plain</type>
            <size>23396</size>
            <attacher name="Thomas Sepez">tsepez</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwODM5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAyLTIxICBUb20gU2Vw
ZXogIDx0c2VwZXpAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFhTU0F1ZGl0b3IgYnlwYXNzIHdp
dGggPHN2Zz4gdGFncyBhbmQgaHRtbC1lbnRpdGllcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4ODM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHM6IGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVk
aXRvci9pZnJhbWUtb25sb2FkLWluLXN2Zy10YWcuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcuaHRtbAor
ICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWct
aW5zaWRlLXN2Zy10YWcyLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy5odG1sCisKKyAgICAgICAgKiBo
dG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9uQ2Fub25p
Y2FsQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVGVybWluYXRpbmdDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydHNIVE1MQ29tbWVu
dEF0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0c1NpbmdsZUxpbmVDb21tZW50QXQpOgorICAg
ICAgICAoV2ViQ29yZTo6ZnVsbHlEZWNvZGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6WFNTQXVkaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjppbml0
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclN0YXJ0VG9rZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6WFNTQXVkaXRvcjo6ZmlsdGVyRW5kVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyQ2hhcmFjdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRv
cjo6ZmlsdGVyU2NyaXB0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyT2JqZWN0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyUGFy
YW1Ub2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJFbWJlZFRva2Vu
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tlbik6CisgICAgICAgIChXZWJDb3Jl
OjpYU1NBdWRpdG9yOjpmaWx0ZXJCYXNlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyRm9ybVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRl
Y29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OnNuaXBwZXRGb3JKYXZhU2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9y
Lmg6CisgICAgICAgIChYU1NBdWRpdG9yKToKKwogMjAxMi0wMi0yMSAgSmFtZXMgUm9iaW5zb24g
IDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpj
b29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyBzaG91bGQgYmUgY29uZGl0aW9uYWwgb24g
Y29tcG9zaXRpbmcgYmVpbmcgYWN0aXZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9YU1NBdWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9YU1NBdWRpdG9yLmNwcAkocmV2aXNpb24gMTA3OTc4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvWFNTQXVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudFBh
cnNlci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIu
aCIKICNpbmNsdWRlICJIVE1MUGFyYW1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC01NCw3ICs1NSw3IEBAIHN0
YXRpYyBib29sIGlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKFVDaGEKICAgICAvLyBXZSByZW1vdmUg
YWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgbm9uLXByaW50YWJsZSBBU0NJSSBj
aGFyYWN0ZXJzLgogICAgIC8vCiAgICAgLy8gTm90ZSwgd2UgZG9uJ3QgcmVtb3ZlIGJhY2tzbGFz
aGVzIGxpa2UgUEhQIHN0cmlwc2xhc2hlcygpLCB3aGljaCBhbW9uZyBvdGhlciB0aGluZ3MgY29u
dmVydHMgIlxcMCIgdG8gdGhlIFwwIGNoYXJhY3Rlci4KLSAgICAvLyBJbnN0ZWFkLCB3ZSByZW1v
dmUgYmFja3NsYXNoZXMgYW5kIHplcm9zIChzaW5jZSB0aGUgc3RyaW5nICJcXDAiID0ocmVtb3Zl
IGJhY2tzbGFzaGVzKT0+ICIwIikuIEhvd2V2ZXIsIHRoaXMgaGFzIHRoZSAKKyAgICAvLyBJbnN0
ZWFkLCB3ZSByZW1vdmUgYmFja3NsYXNoZXMgYW5kIHplcm9zIChzaW5jZSB0aGUgc3RyaW5nICJc
XDAiID0ocmVtb3ZlIGJhY2tzbGFzaGVzKT0+ICIwIikuIEhvd2V2ZXIsIHRoaXMgaGFzIHRoZQog
ICAgIC8vIGFkdmVyc2UgZWZmZWN0IHRoYXQgd2UgcmVtb3ZlIGFueSBsZWdpdGltYXRlIHplcm9z
IGZyb20gYSBzdHJpbmcuCiAgICAgLy8KICAgICAvLyBGb3IgaW5zdGFuY2U6IG5ldyBTdHJpbmco
Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCIpID0+IG5ldyBTdHJpbmcoImh0dHA6Ly9sb2NhbGhvc3Q6
OCIpLgpAQCAtNzEsNyArNzIsNyBAQCBzdGF0aWMgYm9vbCBpc1JlcXVpcmVkRm9ySW5qZWN0aW9u
KFVDaGFyCiAgICAgcmV0dXJuIChjID09ICdcJycgfHwgYyA9PSAnIicgfHwgYyA9PSAnPCcgfHwg
YyA9PSAnPicpOwogfQogCi1zdGF0aWMgYm9vbCBpc1Rlcm1pbmF0aW5nQ2hhcmFjdGVyKFVDaGFy
IGMpIAorc3RhdGljIGJvb2wgaXNUZXJtaW5hdGluZ0NoYXJhY3RlcihVQ2hhciBjKQogewogICAg
IHJldHVybiAoYyA9PSAnJicgfHwgYyA9PSAnLycgfHwgYyA9PSAnIicgfHwgYyA9PSAnXCcnIHx8
IGMgPT0gJzwnKTsKIH0KQEAgLTg3LDIxICs4OCwxNSBAQCBzdGF0aWMgYm9vbCBpc0pTTmV3bGlu
ZShVQ2hhciBjKQogICAgIHJldHVybiAoYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJyB8fCBjID09IDB4
MjAyOCB8fCBjID09IDB4MjAyOSk7CiB9CiAKLXN0YXRpYyBib29sIHN0YXJ0c0hUTUxFbmRUYWdB
dChjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQotewotICAgIHJldHVybiAoc3Rh
cnQgKyAxIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1tzdGFydF0gPT0gJzwnICYmIHN0cmlu
Z1tzdGFydCsxXSA9PSAnLycpOwotfSAgICAKLQotCiBzdGF0aWMgYm9vbCBzdGFydHNIVE1MQ29t
bWVudEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3RhcnQpCiB7CiAgICAgcmV0dXJu
IChzdGFydCArIDMgPCBzdHJpbmcubGVuZ3RoKCkgJiYgc3RyaW5nW3N0YXJ0XSA9PSAnPCcgJiYg
c3RyaW5nW3N0YXJ0KzFdID09ICchJyAmJiBzdHJpbmdbc3RhcnQrMl0gPT0gJy0nICYmIHN0cmlu
Z1tzdGFydCszXSA9PSAnLScpOwotfSAgICAKK30KIAogc3RhdGljIGJvb2wgc3RhcnRzU2luZ2xl
TGluZUNvbW1lbnRBdChjb25zdCBTdHJpbmcmIHN0cmluZywgc2l6ZV90IHN0YXJ0KQogewogICAg
IHJldHVybiAoc3RhcnQgKyAxIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1tzdGFydF0gPT0g
Jy8nICYmIHN0cmluZ1tzdGFydCsxXSA9PSAnLycpOwotfSAgICAKK30KIAogc3RhdGljIGJvb2wg
c3RhcnRzTXVsdGlMaW5lQ29tbWVudEF0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3Qgc3Rh
cnQpCiB7CkBAIC0xNzcsNyArMTcyLDYgQEAgc3RhdGljIFN0cmluZyBmdWxseURlY29kZVN0cmlu
Zyhjb25zdCBTdAogICAgICAgICBvbGRXb3JraW5nU3RyaW5nTGVuZ3RoID0gd29ya2luZ1N0cmlu
Zy5sZW5ndGgoKTsKICAgICAgICAgd29ya2luZ1N0cmluZyA9IGRlY29kZTE2Qml0VW5pY29kZUVz
Y2FwZVNlcXVlbmNlcyhkZWNvZGVTdGFuZGFyZFVSTEVzY2FwZVNlcXVlbmNlcyh3b3JraW5nU3Ry
aW5nLCBlbmNvZGluZykpOwogICAgIH0gd2hpbGUgKHdvcmtpbmdTdHJpbmcubGVuZ3RoKCkgPCBv
bGRXb3JraW5nU3RyaW5nTGVuZ3RoKTsKLSAgICBBU1NFUlQoIXdvcmtpbmdTdHJpbmcuaXNFbXB0
eSgpKTsKICAgICB3b3JraW5nU3RyaW5nLnJlcGxhY2UoJysnLCAnICcpOwogICAgIHdvcmtpbmdT
dHJpbmcgPSBjYW5vbmljYWxpemUod29ya2luZ1N0cmluZyk7CiAgICAgcmV0dXJuIHdvcmtpbmdT
dHJpbmc7CkBAIC0xODgsNiArMTgyLDggQEAgWFNTQXVkaXRvcjo6WFNTQXVkaXRvcihIVE1MRG9j
dW1lbnRQYXJzZQogICAgICwgbV9pc0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3hzc1Byb3RlY3Rp
b24oWFNTUHJvdGVjdGlvbkVuYWJsZWQpCiAgICAgLCBtX3N0YXRlKFVuaW5pdGlhbGl6ZWQpCisg
ICAgLCBtX3Nob3VsZEFsbG93Q0RBVEEoZmFsc2UpCisgICAgLCBtX3NjcmlwdFRhZ05lc3RpbmdM
ZXZlbCgwKQogICAgICwgbV9ub3RpZmllZENsaWVudChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9w
YXJzZXIpOwpAQCAtMjA1LDcgKzIwMSw3IEBAIHZvaWQgWFNTQXVkaXRvcjo6aW5pdCgpCiAgICAg
Y29uc3QgaW50IHN1ZmZpeFRyZWVEZXB0aCA9IDU7CiAKICAgICBBU1NFUlQobV9zdGF0ZSA9PSBV
bmluaXRpYWxpemVkKTsKLSAgICBtX3N0YXRlID0gSW5pdGlhbDsKKyAgICBtX3N0YXRlID0gSW5p
dGlhbGl6ZWQ7CiAKICAgICBpZiAoIW1faXNFbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0y
NTgsMjggKzI1NCwyMSBAQCB2b2lkIFhTU0F1ZGl0b3I6OmluaXQoKQogCiB2b2lkIFhTU0F1ZGl0
b3I6OmZpbHRlclRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgaWYgKG1fc3RhdGUgPT0g
VW5pbml0aWFsaXplZCkgeworICAgIGlmIChtX3N0YXRlID09IFVuaW5pdGlhbGl6ZWQpCiAgICAg
ICAgIGluaXQoKTsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gSW5pdGlhbCk7Ci0gICAgfQot
CisgICAKKyAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsaXplZCk7CiAgICAgaWYgKCFtX2lz
RW5hYmxlZCB8fCBtX3hzc1Byb3RlY3Rpb24gPT0gWFNTUHJvdGVjdGlvbkRpc2FibGVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKLSAgICBjYXNlIFVuaW5pdGlhbGl6ZWQ6Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluaXRpYWw6Ci0gICAg
ICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVyVG9rZW5Jbml0aWFsKHRva2VuKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBBZnRlclNjcmlwdFN0YXJ0VGFnOgotICAgICAgICBkaWRCbG9ja1Nj
cmlwdCA9IGZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyh0b2tlbik7Ci0gICAgICAgIEFT
U0VSVChtX3N0YXRlID09IEluaXRpYWwpOwotICAgICAgICBtX2NhY2hlZFNuaXBwZXQgPSBTdHJp
bmcoKTsKLSAgICAgICAgYnJlYWs7CisgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5U
eXBlczo6U3RhcnRUYWcpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVyU3RhcnRUb2tl
bih0b2tlbik7CisgICAgZWxzZSBpZiAobV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwpIHsKKyAgICAg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKQorICAgICAg
ICAgICAgZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJDaGFyYWN0ZXJUb2tlbih0b2tlbik7CisgICAg
ICAgIGVsc2UgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKQorICAg
ICAgICAgICAgZmlsdGVyRW5kVG9rZW4odG9rZW4pOwogICAgIH0KIAogICAgIGlmIChkaWRCbG9j
a1NjcmlwdCkgewpAQCAtMzAxLDE4ICsyOTAsMTUgQEAgdm9pZCBYU1NBdWRpdG9yOjpmaWx0ZXJU
b2tlbihIVE1MVG9rZW4mIAogICAgIH0KIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tl
bkluaXRpYWwoSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU3RhcnRU
b2tlbihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwp
OwotCi0gICAgaWYgKHRva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBlcmFzZURh
bmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKHRva2VuKTsKIAotICAgIGlmIChoYXNOYW1lKHRv
a2VuLCBzY3JpcHRUYWcpKQorICAgIGlmIChoYXNOYW1lKHRva2VuLCBzY3JpcHRUYWcpKSB7CiAg
ICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlclNjcmlwdFRva2VuKHRva2VuKTsKLSAgICBl
bHNlIGlmIChoYXNOYW1lKHRva2VuLCBvYmplY3RUYWcpKQorICAgICAgICBBU1NFUlQobV9zaG91
bGRBbGxvd0NEQVRBIHx8ICFtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CisgICAgICAgIG1fc2Ny
aXB0VGFnTmVzdGluZ0xldmVsKys7CisgICAgfSBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBvYmpl
Y3RUYWcpKQogICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJPYmplY3RUb2tlbih0b2tl
bik7CiAgICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgcGFyYW1UYWcpKQogICAgICAgICBkaWRC
bG9ja1NjcmlwdCB8PSBmaWx0ZXJQYXJhbVRva2VuKHRva2VuKTsKQEAgLTMzMiwxNiArMzE4LDE4
IEBAIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW5Jbml0aWFsKEhUTUwKICAgICByZXR1cm4g
ZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW5BZnRlclNj
cmlwdFN0YXJ0VGFnKEhUTUxUb2tlbiYgdG9rZW4pCit2b2lkIFhTU0F1ZGl0b3I6OmZpbHRlckVu
ZFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gQWZ0ZXJT
Y3JpcHRTdGFydFRhZyk7Ci0gICAgbV9zdGF0ZSA9IEluaXRpYWw7Ci0KLSAgICBpZiAodG9rZW4u
dHlwZSgpICE9IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpIHsKLSAgICAgICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnIHx8IHRva2VuLnR5cGUoKSA9PSBI
VE1MVG9rZW5UeXBlczo6RW5kT2ZGaWxlKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVChtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CisgICAgaWYgKGhhc05hbWUodG9rZW4sIHNj
cmlwdFRhZykpIHsKKyAgICAgICAgbV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwtLTsKKyAgICAgICAg
QVNTRVJUKG1fc2hvdWxkQWxsb3dDREFUQSB8fCAhbV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwpOwog
ICAgIH0KK30KIAorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9r
ZW4mIHRva2VuKQoreworICAgIEFTU0VSVChtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CiAgICAg
VGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlciA9IG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNv
ZGVyKCk7CiAgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGZ1bGx5RGVjb2RlU3RyaW5nKG1f
Y2FjaGVkU25pcHBldCwgZGVjb2RlcikpKSB7CiAgICAgICAgIGludCBzdGFydCA9IDA7CkBAIC0z
NTgsMjEgKzM0NiwxOSBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclRva2VuQWZ0ZXJTY3JpcHRT
CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4oSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9r
ZW4sIHNjcmlwdFRhZykpOwogCiAgICAgaWYgKGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tl
biwgc3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9zdGF0ZSA9IEFmdGVyU2NyaXB0U3RhcnRUYWc7CiAg
ICAgbV9jYWNoZWRTbmlwcGV0ID0gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKTsKKyAg
ICBtX3Nob3VsZEFsbG93Q0RBVEEgPSBtX3BhcnNlci0+dG9rZW5pemVyKCktPnNob3VsZEFsbG93
Q0RBVEEoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
T2JqZWN0VG9rZW4oSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJ
bml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIG9iamVjdFRhZykpOwogCkBAIC0zODcs
NyArMzczLDYgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbihIVE1MVAogCiBi
b29sIFhTU0F1ZGl0b3I6OmZpbHRlclBhcmFtVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKIHsKLSAg
ICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIHBh
cmFtVGFnKSk7CiAKQEAgLTQwNiw3ICszOTEsNiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclBh
cmFtVG9rZW4oSFRNTFRvCiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1M
VG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwpOwogICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NF
UlQoaGFzTmFtZSh0b2tlbiwgZW1iZWRUYWcpKTsKIApAQCAtNDIxLDcgKzQwNSw2IEBAIGJvb2wg
WFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1MVG8KIAogYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJBcHBsZXRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRl
ID09IEluaXRpYWwpOwogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6
OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYXBwbGV0VGFnKSk7CiAKQEAg
LTQzNSw3ICs0MTgsNiBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKEhUTUxU
CiAKIGJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4oSFRNTFRva2VuJiB0b2tlbikK
IHsKLSAgICBBU1NFUlQobV9zdGF0ZSA9PSBJbml0aWFsKTsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9r
ZW4sIGlmcmFtZVRhZykpOwogCkBAIC00NDQsNyArNDI2LDYgQEAgYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJJZnJhbWVUb2tlbihIVE1MVAogCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tl
bihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwpOwog
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAg
ICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgbWV0YVRhZykpOwogCkBAIC00NTMsNyArNDM0LDYgQEAg
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJNZXRhVG9rZW4oSFRNTFRvawogCiBib29sIFhTU0F1ZGl0
b3I6OmZpbHRlckJhc2VUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogewotICAgIEFTU0VSVChtX3N0
YXRlID09IEluaXRpYWwpOwogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYmFzZVRhZykpOwogCkBA
IC00NjIsNyArNDQyLDYgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJCYXNlVG9rZW4oSFRNTFRv
awogCiBib29sIFhTU0F1ZGl0b3I6OmZpbHRlckZvcm1Ub2tlbihIVE1MVG9rZW4mIHRva2VuKQog
ewotICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWwpOwogICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tl
biwgZm9ybVRhZykpOwogCkBAIC01NDEsOCArNTIwLDYgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OnNu
aXBwZXRGb3JSYW5nZShjb25zdAogCiBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRG
b3JBdHRyaWJ1dGUoY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgY29uc3QgSFRNTFRva2VuOjpBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQpCiB7Ci0gICAgY29uc3Qg
c2l6ZV90IGtNYXhpbXVtU25pcHBldExlbmd0aCA9IDEwMDsKLQogICAgIC8vIFRoZSByYW5nZSBk
b2Vzbid0IGlubGN1ZGUgdGhlIGNoYXJhY3RlciB3aGljaCB0ZXJtaW5hdGVzIHRoZSB2YWx1ZS4g
U28sCiAgICAgLy8gZm9yIGFuIGlucHV0IG9mIHxuYW1lPSJ2YWx1ZSJ8LCB0aGUgc25pcHBldCBp
cyB8bmFtZT0idmFsdWV8LiBGb3IgYW4KICAgICAvLyB1bnF1b3RlZCBpbnB1dCBvZiB8bmFtZT12
YWx1ZSB8LCB0aGUgc25pcHBldCBpcyB8bmFtZT12YWx1ZXwuCkBAIC01NTAsNyArNTI3LDcgQEAg
U3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cgogICAgIGludCBzdGFydCA9
IGF0dHJpYnV0ZS5tX25hbWVSYW5nZS5tX3N0YXJ0IC0gdG9rZW4uc3RhcnRJbmRleCgpOwogICAg
IGludCBlbmQgPSBhdHRyaWJ1dGUubV92YWx1ZVJhbmdlLm1fZW5kIC0gdG9rZW4uc3RhcnRJbmRl
eCgpOwogICAgIFN0cmluZyBkZWNvZGVkU25pcHBldCA9IGZ1bGx5RGVjb2RlU3RyaW5nKHNuaXBw
ZXRGb3JSYW5nZSh0b2tlbiwgc3RhcnQsIGVuZCksIG1fcGFyc2VyLT5kb2N1bWVudCgpLT5kZWNv
ZGVyKCkpOwotICAgIGRlY29kZWRTbmlwcGV0LnRydW5jYXRlKGtNYXhpbXVtU25pcHBldExlbmd0
aCk7CisgICAgZGVjb2RlZFNuaXBwZXQudHJ1bmNhdGUoa01heGltdW1GcmFnbWVudExlbmd0aFRh
cmdldCk7CiAgICAgaWYgKHRyZWF0bWVudCA9PSBTcmNMaWtlQXR0cmlidXRlKSB7CiAgICAgICAg
IGludCBzbGFzaENvdW50OwogICAgICAgICBzaXplX3QgY3VycmVudExlbmd0aDsKQEAgLTU5Myw4
ICs1NzAsNiBAQCBib29sIFhTU0F1ZGl0b3I6OmlzU2FtZU9yaWdpblJlc291cmNlKGNvCiAKIFN0
cmluZyBYU1NBdWRpdG9yOjpzbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBTdHJpbmcmIHN0cmlu
ZykKIHsKLSAgICBjb25zdCBzaXplX3Qga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEw
MDsKLQogICAgIHNpemVfdCBzdGFydFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5kUG9zaXRp
b24gPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90IGZvdW5kUG9zaXRpb24gPSBub3RGb3Vu
ZDsKQEAgLTYwMyw2ICs1NzgsMTUgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OnNuaXBwZXRGb3JKYXZh
U2NyaXB0KAogICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRpb24pIHsKICAgICAg
ICAgd2hpbGUgKHN0YXJ0UG9zaXRpb24gPCBlbmRQb3NpdGlvbiAmJiBpc0hUTUxTcGFjZShzdHJp
bmdbc3RhcnRQb3NpdGlvbl0pKQogICAgICAgICAgICAgc3RhcnRQb3NpdGlvbisrOworCisgICAg
ICAgIC8vIFVuZGVyIFNWRy9YTUwgcnVsZXMsIG9ubHkgSFRNTCBjb21tZW50IHN5bnRheCBtYXR0
ZXJzIGFuZCB0aGUgcGFyc2VyIHJldHVybnMKKyAgICAgICAgLy8gdGhlc2UgYXMgYSBzZXBhcmF0
ZSBjb21tZW50IHRva2Vucy4gSGF2aW5nIGNvbnN1bWVkIHdoaXRlc3BhY2UsIHdlIG5lZWQgbm90
IGxvb2sKKyAgICAgICAgLy8gZnVydGhlciBmb3IgdGhlc2UuCisgICAgICAgIGlmIChtX3Nob3Vs
ZEFsbG93Q0RBVEEpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvLyBVbmRlciBIVE1M
IHJ1bGVzLCBib3RoIHRoZSBIVE1MIGFuZCBKUyBjb21tZW50IHN5bmF0eCBtYXR0ZXJzLCBhbmQg
dGhlIEhUTUwKKyAgICAgICAgLy8gY29tbWVudCBlbmRzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUs
IG5vdCB3aXRoIC0tPi4KICAgICAgICAgaWYgKHN0YXJ0c0hUTUxDb21tZW50QXQoc3RyaW5nLCBz
dGFydFBvc2l0aW9uKSB8fCBzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0cmluZywgc3RhcnRQ
b3NpdGlvbikpIHsKICAgICAgICAgICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgZW5kUG9zaXRp
b24gJiYgIWlzSlNOZXdsaW5lKHN0cmluZ1tzdGFydFBvc2l0aW9uXSkpCiAgICAgICAgICAgICAg
ICAgc3RhcnRQb3NpdGlvbisrOwpAQCAtNjE1LDI5ICs1OTksMjkgQEAgU3RyaW5nIFhTU0F1ZGl0
b3I6OnNuaXBwZXRGb3JKYXZhU2NyaXB0KAogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgLy8gU3RvcCBhdCBuZXh0IGNvbW1lbnQsIG9yIGF0IGEgY2xvc2luZyBzY3JpcHQgdGFnICh3
aGljaCBtYXkgaGF2ZSBiZWVuIGluY2x1ZGVkIHdpdGgKLSAgICAvLyB0aGUgY29kZSBmcmFnbWVu
dCBiZWNhdXNlIG9mIGJ1ZmZlcmluZyBpbiB0aGUgSFRNTFNvdXJjZVRyYWNrZXIpLCBvciB3aGVu
IHdlIGV4Y2VlZAotICAgIC8vIHRoZSBtYXhpbXVtIGxlbmd0aCB0YXJnZXQuIEFmdGVyIGhpdHRp
bmcgdGhlIGxlbmd0aCB0YXJnZXQsIHdlIGNhbiBvbmx5IHN0b3AgYXQgYQotICAgIC8vIHBvaW50
IHdoZXJlIHdlIGtub3cgd2UgYXJlIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGEgJS1lc2NhcGUgc2Vx
dWVuY2UuIEZvciB0aGUgc2FrZSBvZgotICAgIC8vIHNpbXBsaWNpdHksIGFwcHJveGltYXRlIHN0
b3BwaW5nIGF0IGEgY2xvc2Ugc2NyaXB0IHRhZyBieSBzdG9wcGluZyBhdCBhbnkgY2xvc2UgdGFn
LAotICAgIC8vIGFuZCBhcHByb3hpbWF0ZSBub3Qgc3RvcHBpbmcgaW5zaWRlIGEgKHBvc3NpYmx5
IG11bHRpcGx5IGVuY29kZWQpICUtZXNhY3BlIHNlcXVlbmNlCi0gICAgLy8gYnkgYnJlYWtpbmcg
b24gd2hpdGVzcGFjZSBvbmx5LiBXZSBzaG91bGQgaGF2ZSBlbm91Z2ggdGV4dCBpbiB0aGVzZSBj
YXNlcyB0byBhdm9pZAotICAgIC8vIGZhbHNlIHBvc2l0aXZlcy4KKyAgICAvLyBTdG9wIGF0IG5l
eHQgY29tbWVudCAodXNpbmcgdGhlIHNhbWUgcnVsZXMgYXMgYWJvdmUgZm9yIFNWRy9YTUwgdnMg
SFRNTCksIG9yIHdoZW4KKyAgICAvLyB3ZSBleGNlZWQgdGhlIG1heGltdW0gbGVuZ3RoIHRhcmdl
dC4gQWZ0ZXIgaGl0dGluZyB0aGUgbGVuZ3RoIHRhcmdldCwgd2UgY2FuIG9ubHkKKyAgICAvLyBz
dG9wIGF0IGEgcG9pbnQgd2hlcmUgd2Uga25vdyB3ZSBhcmUgbm90IGluIHRoZSBtaWRkbGUgb2Yg
YSAlLWVzY2FwZSBzZXF1ZW5jZS4gRm9yCisgICAgLy8gdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSwg
YXBwcm94aW1hdGUgbm90IHN0b3BwaW5nIGluc2lkZSBhIChwb3NzaWJseSBtdWx0aXBseSBlbmNv
ZGVkKQorICAgIC8vICUtZXNhY3BlIHNlcXVlbmNlIGJ5IGJyZWFraW5nIG9uIHdoaXRlc3BhY2Ug
b25seS4gV2Ugc2hvdWxkIGhhdmUgZW5vdWdoIHRleHQgaW4KKyAgICAvLyB0aGVzZSBjYXNlcyB0
byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXMuCiAgICAgZm9yIChmb3VuZFBvc2l0aW9uID0gc3RhcnRQ
b3NpdGlvbjsgZm91bmRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uOyBmb3VuZFBvc2l0aW9uKyspIHsK
LSAgICAgICAgaWYgKHN0YXJ0c1NpbmdsZUxpbmVDb21tZW50QXQoc3RyaW5nLCBmb3VuZFBvc2l0
aW9uKSB8fCBzdGFydHNNdWx0aUxpbmVDb21tZW50QXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSB8
fCBzdGFydHNIVE1MRW5kVGFnQXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSkgewotICAgICAgICAg
ICAgZW5kUG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMjsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChzdGFydHNIVE1MQ29tbWVudEF0KHN0cmluZywgZm91bmRQ
b3NpdGlvbikpIHsKLSAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiArIDQ7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCFtX3Nob3VsZEFsbG93Q0RBVEEpIHsK
KyAgICAgICAgICAgIGlmIChzdGFydHNTaW5nbGVMaW5lQ29tbWVudEF0KHN0cmluZywgZm91bmRQ
b3NpdGlvbikgfHwgc3RhcnRzTXVsdGlMaW5lQ29tbWVudEF0KHN0cmluZywgZm91bmRQb3NpdGlv
bikpIHsKKyAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGZvdW5kUG9zaXRpb24gKyAyOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHN0
YXJ0c0hUTUxDb21tZW50QXQoc3RyaW5nLCBmb3VuZFBvc2l0aW9uKSkgeworICAgICAgICAgICAg
ICAgIGVuZFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiArIDQ7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGZvdW5kUG9zaXRpb24g
PiBzdGFydFBvc2l0aW9uICsga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCAmJiBpc0hUTUxT
cGFjZShzdHJpbmdbZm91bmRQb3NpdGlvbl0pKSB7CiAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9
IGZvdW5kUG9zaXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAg
ICAKKwogICAgIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uIC0gc3RhcnRQb3NpdGlvbik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1hTU0F1ZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9YU1NBdWRpdG9yLmgJKHJldmlzaW9uIDEwNzk3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL1hTU0F1ZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIGZpbHRlclRva2VuKEhUTUxUb2tlbiYpOwogCiBwcml2YXRlOgorICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsK
KwogICAgIGVudW0gU3RhdGUgewogICAgICAgICBVbmluaXRpYWxpemVkLAotICAgICAgICBJbml0
aWFsLAotICAgICAgICBBZnRlclNjcmlwdFN0YXJ0VGFnLAorICAgICAgICBJbml0aWFsaXplZAog
ICAgIH07CiAKICAgICBlbnVtIEF0dHJpYnV0ZUtpbmQgewpAQCAtNTUsOSArNTYsOSBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBpbml0KCk7CiAKLSAgICBib29sIGZpbHRlclRva2VuSW5pdGlhbChI
VE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlclRva2VuQWZ0ZXJTY3JpcHRTdGFydFRhZyhIVE1M
VG9rZW4mKTsKLQorICAgIGJvb2wgZmlsdGVyU3RhcnRUb2tlbihIVE1MVG9rZW4mKTsKKyAgICB2
b2lkIGZpbHRlckVuZFRva2VuKEhUTUxUb2tlbiYpOworICAgIGJvb2wgZmlsdGVyQ2hhcmFjdGVy
VG9rZW4oSFRNTFRva2VuJik7CiAgICAgYm9vbCBmaWx0ZXJTY3JpcHRUb2tlbihIVE1MVG9rZW4m
KTsKICAgICBib29sIGZpbHRlck9iamVjdFRva2VuKEhUTUxUb2tlbiYpOwogICAgIGJvb2wgZmls
dGVyUGFyYW1Ub2tlbihIVE1MVG9rZW4mKTsKQEAgLTg4LDYgKzg5LDggQEAgcHJpdmF0ZToKIAog
ICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgU3RyaW5nIG1fY2FjaGVkU25pcHBldDsKKyAgICBib29s
IG1fc2hvdWxkQWxsb3dDREFUQTsKKyAgICB1bnNpZ25lZCBtX3NjcmlwdFRhZ05lc3RpbmdMZXZl
bDsKICAgICBib29sIG1fbm90aWZpZWRDbGllbnQ7CiB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MDgzOTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxOSBAQAorMjAxMi0wMi0yMSAgVG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBYU1NBdWRpdG9yIGJ5cGFzcyB3aXRoIDxzdmc+IHRhZ3MgYW5kIGh0bWwtZW50aXRp
ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODgz
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtaW4tc3ZnLXRhZy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRv
ci9pZnJhbWUtb25sb2FkLWluLXN2Zy10YWcuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWctZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rl
c3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Iv
c2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzIuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90
ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWczLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWczLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTIxICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBVbnJl
dmlld2VkIGdhcmRlbmluZy4gVHlwbyBmaXguCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3NlY3VyaXR5L3hzc0F1ZGl0b3IvaWZyYW1lLW9ubG9hZC1pbi1zdmctdGFnLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvaWZyYW1lLW9ubG9hZC1pbi1zdmctdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9pZnJhbWUtb25sb2Fk
LWluLXN2Zy10YWctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKK0NP
TlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVjdXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNv
dXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRoaW4gcmVxdWVzdC4KKworIFRlc3QgdGhhdCBk
YW5nZXJvdXMgYXR0cmlidXRlcyBhcmUgc3RpbGwgZmlsdGVyZWQgaW4gbmV0c3RlZCBzY3JpcHQg
Y29udGV4dHMuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0
b3IvaWZyYW1lLW9ubG9hZC1pbi1zdmctdGFnLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtaW4tc3ZnLXRh
Zy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94
c3NBdWRpdG9yL2lmcmFtZS1vbmxvYWQtaW4tc3ZnLXRhZy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5zZXRYU1NBdWRpdG9y
RW5hYmxlZCh0cnVlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8aWZyYW1lIHNy
Yz0iaHR0cDovL2xvY2FsaG9zdDo4MDAwL3NlY3VyaXR5L3hzc0F1ZGl0b3IvcmVzb3VyY2VzL2Vj
aG8taW50ZXJ0YWcucGw/cT08c3ZnPjxzY3JpcHQ+PGlmcmFtZSUyMG9ubG9hZD1hbGVydCgwKT48
L2lmcmFtZT48L3NjcmlwdD48L3N2Zz4iPgorPC9pZnJhbWU+CitUZXN0IHRoYXQgZGFuZ2Vyb3Vz
IGF0dHJpYnV0ZXMgYXJlIHN0aWxsIGZpbHRlcmVkIGluIG5ldHN0ZWQgc2NyaXB0IGNvbnRleHRz
LgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0
eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcyLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2Ny
aXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRl
LXN2Zy10YWcyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACitDT05T
T0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3Vy
Y2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKyBFbnN1cmVzIEhUTUwg
ZW50aXRpZXMgYXJlIHJlY29nbml6ZWQgaW4gc2NyaXB0IGJsb2NrcyBpbiBhIGNvbnRleHQgd2hl
cmUgQ0RBVEEgaXMgYWxsb3dlZCBldmVuIHdpdGggPCEtLSBjb21tZW50cyAtLT4uCkluZGV4OiBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNp
ZGUtc3ZnLXRhZzIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3ZnLXRhZzIuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLWluc2lkZS1zdmctdGFnMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBA
Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLnNldFhTU0F1ZGl0b3JFbmFibGVkKHRydWUpOwor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxpZnJhbWUgc3JjPSJodHRwOi8vbG9jYWxo
b3N0OjgwMDAvc2VjdXJpdHkveHNzQXVkaXRvci9yZXNvdXJjZXMvZWNoby1pbnRlcnRhZy5wbD9j
bHV0dGVyPTxkaXY+PGk+eDwvaT48L2Rpdj4mcT08c3ZnPjxzY3JpcHQ+PCEtLSZxMj0tLT4lMjYl
MjR4MGE7YWxlcnQlMjYlMjN4Mjk7U3RyaW5nLmZyb21DaGFyQ29kZSgweDU4LDB4NTMsMHg1Mykp
PC9zdmc+PC9zY3JpcHQ+Ij4KKzwvaWZyYW1lPgorRW5zdXJlcyBIVE1MIGVudGl0aWVzIGFyZSBy
ZWNvZ25pemVkIGluIHNjcmlwdCBibG9ja3MgaW4gYSBjb250ZXh0IHdoZXJlIENEQVRBIGlzIGFs
bG93ZWQgZXZlbiB3aXRoICZsdDshLS0gY29tbWVudHMgLS0mZ3Q7LgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3Njcmlw
dC10YWctaW5zaWRlLXN2Zy10YWczLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3Ivc2NyaXB0LXRhZy1pbnNpZGUtc3Zn
LXRhZzMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWczLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVz
ZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQgc2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQg
Zm91bmQgd2l0aGluIHJlcXVlc3QuCisKK0NPTlNPTEUgTUVTU0FHRTogUmVmdXNlZCB0byBleGVj
dXRlIGEgSmF2YVNjcmlwdCBzY3JpcHQuIFNvdXJjZSBjb2RlIG9mIHNjcmlwdCBmb3VuZCB3aXRo
aW4gcmVxdWVzdC4KKworIEVuc3VyZXMgSFRNTCBlbnRpdGllcyBhcmUgcmVjb2duaXplZCBpbiBz
Y3JpcHQgYmxvY2tzIGluIGEgY29udGV4dCB3aGVyZSBDREFUQSBpcyBhbGxvd2VkIGV2ZW4gd2l0
aCBuZXN0ZWQgc2NyaXB0IGJsb2Nrcy4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnMy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQt
dGFnLWluc2lkZS1zdmctdGFnMy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWczLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94c3NBdWRp
dG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP2NsdXR0ZXI9PHNjcmlwdD5hbGVydCgxKTwv
c2NyaXB0PiZxPTxzdmc+PHNjcmlwdD4mcTI9YWxlcnQoMCk7PC9zY3JpcHQ+PC9zdmc+Ij4KKzwv
aWZyYW1lPgorRW5zdXJlcyBIVE1MIGVudGl0aWVzIGFyZSByZWNvZ25pemVkIGluIHNjcmlwdCBi
bG9ja3MgaW4gYSBjb250ZXh0IHdoZXJlIENEQVRBIGlzIGFsbG93ZWQgZXZlbiB3aXRoIG5lc3Rl
ZCBzY3JpcHQgYmxvY2tzLgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9yL3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWctZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
eHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3Jp
cHQtdGFnLWluc2lkZS1zdmctdGFnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACitDT05TT0xFIE1FU1NBR0U6IFJlZnVzZWQgdG8gZXhlY3V0ZSBhIEphdmFTY3JpcHQg
c2NyaXB0LiBTb3VyY2UgY29kZSBvZiBzY3JpcHQgZm91bmQgd2l0aGluIHJlcXVlc3QuCisKKyBF
bnN1cmVzIEhUTUwgZW50aXRpZXMgYXJlIHJlY29nbml6ZWQgaW4gc2NyaXB0IGJsb2NrcyBpbiBh
IGNvbnRleHQgd2hlcmUgQ0RBVEEgaXMgYWxsb3dlZC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmctdGFnLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS94c3NBdWRpdG9y
L3NjcmlwdC10YWctaW5zaWRlLXN2Zy10YWcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9zY3JpcHQtdGFnLWluc2lkZS1zdmct
dGFnLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKKzwhRE9DVFlQRSBodG1sPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuc2V0WFNTQXVkaXRvckVuYWJsZWQodHJ1ZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGlmcmFtZSBzcmM9Imh0dHA6Ly9sb2NhbGhvc3Q6ODAwMC9zZWN1cml0eS94
c3NBdWRpdG9yL3Jlc291cmNlcy9lY2hvLWludGVydGFnLnBsP3E9PHN2Zz48c2NyaXB0Pi8vJTI2
JTI0eDBhO2FsZXJ0JTI2JTIzeDI5O1N0cmluZy5mcm9tQ2hhckNvZGUoMHg1OCwweDUzLDB4NTMp
KTwvc3ZnPjwvc2NyaXB0PiI+Cis8L2lmcmFtZT4KK0Vuc3VyZXMgSFRNTCBlbnRpdGllcyBhcmUg
cmVjb2duaXplZCBpbiBzY3JpcHQgYmxvY2tzIGluIGEgY29udGV4dCB3aGVyZSBDREFUQSBpcyBh
bGxvd2VkLgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>