<?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>162228</bug_id>
          
          <creation_ts>2016-09-19 13:20:03 -0700</creation_ts>
          <short_desc>URLParser should parse serialized valid URLs faster than unknown input</short_desc>
          <delta_ts>2016-09-19 16:05:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1231272</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 13:20:03 -0700</bug_when>
    <thetext>URLParser should parse serialized valid URLs faster than unknown input</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231275</commentid>
    <comment_count>1</comment_count>
      <attachid>289250</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 13:22:31 -0700</bug_when>
    <thetext>Created attachment 289250
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231313</commentid>
    <comment_count>2</comment_count>
      <attachid>289250</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-19 14:17:24 -0700</bug_when>
    <thetext>Comment on attachment 289250
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        No new tests.  No change in behavior.

nit: extra space :)

&gt; Source/WebCore/platform/URLParser.cpp:855
&gt; +template&lt;typename CharacterType, bool serialized&gt;

Why the extra template parameter here? It is not used.

&gt; Source/WebCore/platform/URLParser.cpp:890
&gt; +template&lt;typename CharacterType, bool serialized&gt;

If we reversed the parameters, we could let the compiler deduct the second one

&gt; Source/WebCore/platform/URLParser.cpp:891
&gt; +void incrementIterator(CodePointIterator&lt;CharacterType&gt;&amp; iterator)

I would call this something like &quot;skipWhileTabOrNewline&quot; and move the first ++iterator out. This seems clearer and more reusable.
The call sites can then do:
++iterator;
if (!serialized)
    skipWhileTabOrNewline();

Alternatively, since this seems to be used a lot, you could simply rename this function to something clearer like: incrementIteratorSkippingTabAndNewLine.

&gt; Source/WebCore/platform/URLParser.cpp:898
&gt; +template&lt;typename CharacterType, bool serialized&gt;

Would look nicer at call sites to use an enum class instead of a boolean. e.g. enum class IsSerialized { No, Yes };

If we reversed the parameters, we could let the compiler deduct the second one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231376</commentid>
    <comment_count>3</comment_count>
      <attachid>289268</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 15:52:14 -0700</bug_when>
    <thetext>Created attachment 289268
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231377</commentid>
    <comment_count>4</comment_count>
      <attachid>289268</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 15:54:08 -0700</bug_when>
    <thetext>Comment on attachment 289268
Patch

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

&gt; Source/WebCore/platform/URLParser.cpp:439
&gt; +template&lt;bool serialized&gt;
&gt;  inline static void utf8PercentEncode(UChar32 codePoint, Vector&lt;LChar&gt;&amp; destination, bool(*isInCodeSet)(UChar32))

I made these templates instead of another parameter to be more consistent with the other uses of serialized.  The generated code is equivalent once optimized.

&gt; Source/WebCore/platform/URLParser.cpp:890
&gt; +    const bool serialized = true;
&gt; +    if (input.is8Bit())
&gt; +        return parse&lt;serialized&gt;(input.characters8(), input.length(), { }, UTF8Encoding());

I named the bool instead of adding an enum.  This makes this call site easier to read, and it makes the use sites less cluttered.

&gt; Source/WebCore/platform/URLParser.cpp:1111
&gt; +                incrementIteratorSkippingTabAndNewLine&lt;serialized&gt;(c);

I chose the verbose name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1231381</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-19 16:05:25 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/206125</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289250</attachid>
            <date>2016-09-19 13:22:31 -0700</date>
            <delta_ts>2016-09-19 15:52:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162228-20160919131946.patch</filename>
            <type>text/plain</type>
            <size>22847</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjEwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMUGFyc2Vy
IHNob3VsZCBwYXJzZSBzZXJpYWxpemVkIHZhbGlkIFVSTHMgZmFzdGVyIHRoYW4gdW5rbm93biBp
bnB1dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IFVSTCBjb25zdHJ1Y3RvciB3aXRoIFBhcnNlZFVSTFN0cmluZ1RhZyBpcyBhbG1vc3QgdHdpY2Ug
YXMgZmFzdCBhcyB0aGUgb3RoZXIgVVJMIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgQXNzdW1pbmcg
dGhlcmUgYXJlIG5vIHRhYnMgb3IgbmV3bGluZXMsIGFuZCBhc3N1bWluZyBjaGFyYWN0ZXJzIGFy
ZSBhbHJlYWR5IGVuY29kZWQgZGVjcmVhc2VzIHRoZSBVUkxQYXJzZXIKKyAgICAgICAgcnVudGlt
ZSBieSBvdmVyIDI1JSBhbmQgYWRkcyBpbmZyYXN0cnVjdHVyZSBmb3IgbW9yZSBvcHRpbWl6YXRp
b25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OlVSTCk6
CisgICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnV0
ZjhQZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVl
cnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpVUkxQYXJzZXI6OnBhcnNlU2VyaWFsaXplZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpp
bmNyZW1lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBhcnNlQXV0
aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9V
UkxQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2UpOiBEZWxldGVk
LgorCiAyMDE2LTA5LTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgc2l6ZSBhc3NlcnQgZm9yIFJlbmRlckVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vVVJMLmNwcAkocmV2aXNpb24gMjA2MDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDkgKzQ0Miw4IEBAIFVSTDo6VVJMKFBhcnNl
ZFVSTFN0cmluZ1RhZywgY29uc3QgU3RyaW4KIHsKICAgICBpZiAoVVJMUGFyc2VyOjplbmFibGVk
KCkpIHsKICAgICAgICAgVVJMUGFyc2VyIHBhcnNlcjsKLSAgICAgICAgKnRoaXMgPSBwYXJzZXIu
cGFyc2UodXJsKTsKLSAgICAgICAgQVNTRVJUKCh1cmwuaXNFbXB0eSgpICYmIG1fc3RyaW5nLmlz
RW1wdHkoKSkgfHwgdXJsID09IG1fc3RyaW5nKTsgLy8gRklYTUU6IEludmVzdGlnYXRlIHBhcnNp
bmcgbm9uLW51bGwgZW1wdHkgUGFyc2VkVVJMU3RyaW5ncy4KLSAgICB9IGVsc2UgeworICAgICAg
ICAqdGhpcyA9IHBhcnNlci5wYXJzZVNlcmlhbGl6ZWRVUkwodXJsKTsKKyAgICB9IGVsc2UKICAg
ICAgICAgcGFyc2UodXJsKTsKICNpZiBPUyhXSU5ET1dTKQogICAgICAgICAvLyBGSVhNRSgxNDg1
OTgpOiBXb3JrIGFyb3VuZCBXaW5kb3dzIGxvY2FsIGZpbGUgaGFuZGxpbmcgYnVnIGluIENGTmV0
d29yawpAQCAtNDUyLDcgKzQ1MSw2IEBAIFVSTDo6VVJMKFBhcnNlZFVSTFN0cmluZ1RhZywgY29u
c3QgU3RyaW4KICNlbHNlCiAgICAgICAgIEFTU0VSVCh1cmwgPT0gbV9zdHJpbmcpOwogI2VuZGlm
Ci0gICAgfQogfQogCiBVUkw6OlVSTChjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVs
YXRpdmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9u
IDIwNjA3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzNSwzNiArNDM1LDQ4IEBAIGlubGluZSBzdGF0aWMgdm9pZCBwZXJjZW50
RW5jb2RlKHVpbnQ4X3QKICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERp
Z2l0KGJ5dGUpKTsKIH0KIAotaW5saW5lIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVD
aGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNv
ZGVTZXQpKFVDaGFyMzIpKQoraW5saW5lIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVD
aGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNv
ZGVTZXQpKFVDaGFyMzIpLCBib29sIHNlcmlhbGl6ZWQpCiB7Ci0gICAgaWYgKGlzSW5Db2RlU2V0
KGNvZGVQb2ludCkpIHsKLSAgICAgICAgdWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdUSF07Ci0g
ICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKLSAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxzZTsK
LSAgICAgICAgVThfQVBQRU5EKGJ1ZmZlciwgb2Zmc2V0LCBVOF9NQVhfTEVOR1RILCBjb2RlUG9p
bnQsIGVycm9yKTsKLSAgICAgICAgLy8gRklYTUU6IENoZWNrIGVycm9yLgotICAgICAgICBmb3Ig
KGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkKLSAgICAgICAgICAgIHBlcmNlbnRFbmNv
ZGUoYnVmZmVyW2ldLCBkZXN0aW5hdGlvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShpc0FTQ0lJKGNvZGVQb2ludCksICJpc0luQ29kZVNldCBzaG91bGQgYWx3
YXlzIHJldHVybiB0cnVlIGZvciBub24tQVNDSUkgY2hhcmFjdGVycyIpOworICAgIGlmIChzZXJp
YWxpemVkKSB7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQVND
SUkoY29kZVBvaW50KSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9O
KCFpc0luQ29kZVNldChjb2RlUG9pbnQpKTsKICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGNv
ZGVQb2ludCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzSW5Db2RlU2V0KGNvZGVQb2lu
dCkpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOworICAgICAg
ICAgICAgaW50MzJfdCBvZmZzZXQgPSAwOworICAgICAgICAgICAgVUJvb2wgZXJyb3IgPSBmYWxz
ZTsKKyAgICAgICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwgVThfTUFYX0xFTkdUSCwg
Y29kZVBvaW50LCBlcnJvcik7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCisg
ICAgICAgICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkKKyAgICAgICAg
ICAgICAgICBwZXJjZW50RW5jb2RlKGJ1ZmZlcltpXSwgZGVzdGluYXRpb24pOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpc0FTQ0lJKGNvZGVQb2lu
dCksICJpc0luQ29kZVNldCBzaG91bGQgYWx3YXlzIHJldHVybiB0cnVlIGZvciBub24tQVNDSUkg
Y2hhcmFjdGVycyIpOworICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGNvZGVQb2ludCk7
CisgICAgICAgIH0KICAgICB9CiB9CiAKLWlubGluZSBzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVu
Y29kZVF1ZXJ5KFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbikK
K2lubGluZSBzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFyMzIgY29kZVBv
aW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgYm9vbCBzZXJpYWxpemVkKQogewotICAg
IHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwotICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsK
LSAgICBVQm9vbCBlcnJvciA9IGZhbHNlOwotICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwg
VThfTUFYX0xFTkdUSCwgY29kZVBvaW50LCBlcnJvcik7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04ob2Zmc2V0IDw9IHN0YXRpY19jYXN0PGludDMyX3Q+KHNpemVvZihidWZm
ZXIpKSk7Ci0gICAgLy8gRklYTUU6IENoZWNrIGVycm9yLgotICAgIGZvciAoaW50MzJfdCBpID0g
MDsgaSA8IG9mZnNldDsgKytpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZSA9IGJ1ZmZlcltpXTsKLSAg
ICAgICAgaWYgKHNob3VsZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoYnl0ZSkpCi0gICAgICAgICAg
ICBwZXJjZW50RW5jb2RlKGJ5dGUsIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGJ5dGUpOworICAgIGlmIChzZXJpYWxpemVkKSB7Cisg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQVNDSUkoY29kZVBvaW50
KSk7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFzaG91bGRQZXJj
ZW50RW5jb2RlUXVlcnlCeXRlKGNvZGVQb2ludCkpOworICAgICAgICBkZXN0aW5hdGlvbi5hcHBl
bmQoY29kZVBvaW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICB1aW50OF90IGJ1ZmZlcltVOF9N
QVhfTEVOR1RIXTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwOworICAgICAgICBVQm9vbCBl
cnJvciA9IGZhbHNlOworICAgICAgICBVOF9BUFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01BWF9M
RU5HVEgsIGNvZGVQb2ludCwgZXJyb3IpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihvZmZzZXQgPD0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGJ1ZmZlcikp
KTsKKyAgICAgICAgLy8gRklYTUU6IENoZWNrIGVycm9yLgorICAgICAgICBmb3IgKGludDMyX3Qg
aSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgeworICAgICAgICAgICAgYXV0byBieXRlID0gYnVmZmVy
W2ldOworICAgICAgICAgICAgaWYgKHNob3VsZFBlcmNlbnRFbmNvZGVRdWVyeUJ5dGUoYnl0ZSkp
CisgICAgICAgICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYXBwZW5kKGJ5dGUpOwor
ICAgICAgICB9CiAgICAgfQogfQogICAgIApAQCAtODQwLDcgKzg1Miw3IEBAIHZvaWQgVVJMUGFy
c2VyOjpwb3BQYXRoKCkKICAgICBtX2FzY2lpQnVmZmVyLnJlc2l6ZShtX3VybC5tX3BhdGhBZnRl
ckxhc3RTbGFzaCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBib29sIHNlcmlhbGl6ZWQ+CiBVUkwgVVJMUGFy
c2VyOjpmYWlsdXJlKGNvbnN0IENoYXJhY3RlclR5cGUqIGlucHV0LCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgVVJMIHVybDsKQEAgLTg2NCwxMSArODc2LDI2IEBAIFVSTCBVUkxQYXJzZXI6OmZh
aWx1cmUoY29uc3QgQ2hhcmFjdGVyVHkKIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmlu
ZyYgaW5wdXQsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykK
IHsKICAgICBpZiAoaW5wdXQuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBwYXJzZShpbnB1dC5j
aGFyYWN0ZXJzOCgpLCBpbnB1dC5sZW5ndGgoKSwgYmFzZSwgZW5jb2RpbmcpOwotICAgIHJldHVy
biBwYXJzZShpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgaW5wdXQubGVuZ3RoKCksIGJhc2UsIGVuY29k
aW5nKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlPExDaGFyLCBmYWxzZT4oaW5wdXQuY2hhcmFjdGVy
czgoKSwgaW5wdXQubGVuZ3RoKCksIGJhc2UsIGVuY29kaW5nKTsKKyAgICByZXR1cm4gcGFyc2U8
VUNoYXIsIGZhbHNlPihpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgaW5wdXQubGVuZ3RoKCksIGJhc2Us
IGVuY29kaW5nKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK1VSTCBV
UkxQYXJzZXI6OnBhcnNlU2VyaWFsaXplZFVSTChjb25zdCBTdHJpbmcmIGlucHV0KQoreworICAg
IGlmIChpbnB1dC5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlPExDaGFyLCB0cnVlPihp
bnB1dC5jaGFyYWN0ZXJzOCgpLCBpbnB1dC5sZW5ndGgoKSwgeyB9LCBVVEY4RW5jb2RpbmcoKSk7
CisgICAgcmV0dXJuIHBhcnNlPFVDaGFyLCB0cnVlPihpbnB1dC5jaGFyYWN0ZXJzMTYoKSwgaW5w
dXQubGVuZ3RoKCksIHsgfSwgVVRGOEVuY29kaW5nKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBDaGFyYWN0ZXJUeXBlLCBib29sIHNlcmlhbGl6ZWQ+Cit2b2lkIGluY3JlbWVudEl0ZXJhdG9y
KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBpdGVyYXRvcikKK3sKKyAgICArK2l0
ZXJhdG9yOworICAgIHdoaWxlICghc2VyaWFsaXplZCAmJiAhaXRlcmF0b3IuYXRFbmQoKSAmJiBp
c1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQorICAgICAgICArK2l0ZXJhdG9yOworfQorICAgIAor
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgYm9vbCBzZXJpYWxpemVkPgogVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSogaW5wdXQsIGNvbnN0IHVuc2lnbmVk
IGxlbmd0aCwgY29uc3QgVVJMJiBiYXNlLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQog
ewogICAgIExPRyhVUkxQYXJzZXIsICJQYXJzaW5nIFVSTCA8JXM+IGJhc2UgPCVzPiIsIFN0cmlu
ZyhpbnB1dCwgbGVuZ3RoKS51dGY4KCkuZGF0YSgpLCBiYXNlLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwpAQCAtOTE2LDcgKzk0Myw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJh
Y3RlclR5cGUKIAogICAgIFN0YXRlIHN0YXRlID0gU3RhdGU6OlNjaGVtZVN0YXJ0OwogICAgIHdo
aWxlICghYy5hdEVuZCgpKSB7Ci0gICAgICAgIGlmIChpc1RhYk9yTmV3bGluZSgqYykpIHsKKyAg
ICAgICAgaWYgKCFzZXJpYWxpemVkICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkgewogICAgICAgICAg
ICAgKytjOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTk2MCw5ICs5ODcs
NyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAg
ICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAg
ICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAg
ICAgICAgICAgICAgYXV0byBtYXliZVNsYXNoID0gYzsKLSAgICAgICAgICAgICAgICAgICAgKytt
YXliZVNsYXNoOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIW1heWJlU2xhc2guYXRFbmQo
KSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICArK21heWJlU2xhc2g7CisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudEl0ZXJhdG9yPENo
YXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KG1heWJlU2xhc2gpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1heWJlU2xhc2guYXRFbmQoKSAmJiAqbWF5YmVTbGFzaCA9PSAnLycpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fdXJsLm1fdXNlclN0
YXJ0ICsgMTsKQEAgLTk4Myw5ICsxMDA4LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIGMgPSBiZWdpbkFmdGVyQ29udHJvbEFuZFNw
YWNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
KytjOwotICAgICAgICAgICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMp
KQotICAgICAgICAgICAgICAgICsrYzsKKyAgICAgICAgICAgIGluY3JlbWVudEl0ZXJhdG9yPENo
YXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGMpOwogICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkg
ewogICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsKQEAgLTk5NSw3ICsxMDE4LDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpOb1Nj
aGVtZToKICAgICAgICAgICAgIExPR19TVEFURSgiTm9TY2hlbWUiKTsKICAgICAgICAgICAgIGlm
IChiYXNlLmlzTnVsbCgpIHx8IChiYXNlLm1fY2Fubm90QmVBQmFzZVVSTCAmJiAqYyAhPSAnIycp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlPENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGlucHV0
LCBsZW5ndGgpOwogICAgICAgICAgICAgaWYgKGJhc2UubV9jYW5ub3RCZUFCYXNlVVJMICYmICpj
ID09ICcjJykgewogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBh
cnQ6OlF1ZXJ5RW5kKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsK
QEAgLTEwMTUsMTEgKzEwMzgsOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0
ZXJUeXBlCiAgICAgICAgICAgICBMT0dfU1RBVEUoIlNwZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5
Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQotICAgICAgICAgICAg
ICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgaW5jcmVtZW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZSwgc2VyaWFsaXplZD4oYyk7CiAgICAgICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlPENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGlu
cHV0LCBsZW5ndGgpOwogICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXM7CkBAIC0xMDgz
LDkgKzExMDQsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAg
ICAgICAgICAgICBMT0dfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzIik7CiAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8iLCAyKTsKICAgICAgICAgICAgIGlmICgqYyA9
PSAnLycgfHwgKmMgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgICsrYzsKLSAgICAgICAgICAg
ICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqYykpCi0gICAgICAgICAg
ICAgICAgICAgICsrYzsKKyAgICAgICAgICAgICAgICBpbmNyZW1lbnRJdGVyYXRvcjxDaGFyYWN0
ZXJUeXBlLCBzZXJpYWxpemVkPihjKTsKICAgICAgICAgICAgICAgICBpZiAoIWMuYXRFbmQoKSAm
JiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpKQogICAgICAgICAgICAgICAgICAgICArK2M7CiAg
ICAgICAgICAgICB9CkBAIC0xMTA1LDEwICsxMTI0LDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgTE9HX1NUQVRFKCJBdXRob3JpdHlPckhv
c3QiKTsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoKmMgPT0gJ0AnKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhcnNlQXV0aG9yaXR5KENvZGVQb2ludEl0ZXJhdG9yPENoYXJh
Y3RlclR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICsrYzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5l
d2xpbmUoKmMpKQotICAgICAgICAgICAgICAgICAgICAgICAgKytjOworICAgICAgICAgICAgICAg
ICAgICBwYXJzZUF1dGhvcml0eTxDaGFyYWN0ZXJUeXBlLCBzZXJpYWxpemVkPihDb2RlUG9pbnRJ
dGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpOworICAgICAg
ICAgICAgICAgICAgICBpbmNyZW1lbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlLCBzZXJpYWxpemVk
PihjKTsKICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwogICAg
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpIb3N0OwogICAgICAgICAgICAgICAgICAg
ICBtX2hvc3RIYXNQZXJjZW50T3JOb25BU0NJSSA9IGZhbHNlOwpAQCAtMTExOCw4ICsxMTM1LDgg
QEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAg
ICAgIGlmIChpc1NsYXNoIHx8ICpjID09ICc/JyB8fCAqYyA9PSAnIycpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3Rl
clR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFwYXJzZUhvc3Q8Q2hhcmFjdGVyVHlwZSwgc2VyaWFsaXplZD4oQ29kZVBvaW50SXRlcmF0b3I8
Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlPENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGlucHV0
LCBsZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2xhc2gpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6
ZSgpOwpAQCAtMTEzNSw4ICsxMTUyLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpIb3N0OgogICAgICAgICAgICAgTE9HX1NU
QVRFKCJIb3N0Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICc/JyB8fCAq
YyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVy
YXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXBhcnNlSG9zdDxDaGFyYWN0ZXJUeXBlLCBzZXJpYWxpemVkPihDb2RlUG9pbnRJdGVy
YXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFpbHVyZTxDaGFyYWN0ZXJUeXBlLCBzZXJpYWxpemVkPihpbnB1
dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMTI2NSw4ICsxMjgyLDggQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFwYXJzZUhvc3Q8Q2hhcmFjdGVyVHlwZSwgc2VyaWFsaXplZD4oQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU8Q2hhcmFjdGVyVHlwZSwgc2VyaWFsaXplZD4oaW5w
dXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKFN0cmlu
Z1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lp
QnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgewog
ICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnNocmluayhtX3VybC5tX3Bhc3N3b3Jk
RW5kKTsKQEAgLTEzMjcsNyArMTM0NCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENo
YXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9hc2Np
aUJ1ZmZlciwgaXNJbkRlZmF1bHRFbmNvZGVTZXQpOworICAgICAgICAgICAgdXRmOFBlcmNlbnRF
bmNvZGUoKmMsIG1fYXNjaWlCdWZmZXIsIGlzSW5EZWZhdWx0RW5jb2RlU2V0LCBzZXJpYWxpemVk
KTsKICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0
YXRlOjpDYW5ub3RCZUFCYXNlVVJMUGF0aDoKQEAgLTEzNDAsNyArMTM1Nyw3IEBAIFVSTCBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICBtX3VybC5t
X3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3Rh
dGU6OkZyYWdtZW50OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1dGY4
UGVyY2VudEVuY29kZSgqYywgbV9hc2NpaUJ1ZmZlciwgaXNJblNpbXBsZUVuY29kZVNldCk7Cisg
ICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYXNjaWlCdWZmZXIsIGlzSW5T
aW1wbGVFbmNvZGVTZXQsIHNlcmlhbGl6ZWQpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM1NCw3ICsxMzcxLDcgQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzVVRGOEVuY29kaW5nKQotICAgICAg
ICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoKmMsIG1fYXNjaWlCdWZmZXIpOworICAg
ICAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoKmMsIG1fYXNjaWlCdWZmZXIsIHNl
cmlhbGl6ZWQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHF1ZXJ5QnVmZmVy
LmFwcGVuZCgqYyk7CiAgICAgICAgICAgICArK2M7CkBAIC0xMzc1LDEwICsxMzkyLDEwIEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgTE9HX0ZJTkFM
X1NUQVRFKCJTY2hlbWVTdGFydCIpOwogICAgICAgICBpZiAoIW1fYXNjaWlCdWZmZXIuc2l6ZSgp
ICYmICFiYXNlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGJhc2U7Ci0gICAgICAgIHJl
dHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZmFpbHVyZTxDaGFy
YWN0ZXJUeXBlLCBzZXJpYWxpemVkPihpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNlIFN0YXRlOjpT
Y2hlbWU6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lIik7Ci0gICAgICAgIHJldHVy
biBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOworICAgICAgICByZXR1cm4gZmFpbHVyZTxDaGFyYWN0
ZXJUeXBlLCBzZXJpYWxpemVkPihpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNlIFN0YXRlOjpOb1Nj
aGVtZToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJOb1NjaGVtZSIpOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTQyMCw3ICsxNDM3LDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNl
IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczoKICAgICAgICAgTE9HX0ZJTkFM
X1NUQVRFKCJTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyIpOwotICAgICAgICByZXR1cm4g
ZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIGZhaWx1cmU8Q2hhcmFjdGVy
VHlwZSwgc2VyaWFsaXplZD4oaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU3RhdGU6OkF1dGhvcml0eU9ySG9zdDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJBdXRo
b3JpdHlPckhvc3QiKTsKQEAgLTE0MzAsOCArMTQ0Nyw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNl
KGNvbnN0IENoYXJhY3RlclR5cGUKICAgICBjYXNlIFN0YXRlOjpIb3N0OgogICAgICAgICBpZiAo
c3RhdGUgPT0gU3RhdGU6Okhvc3QpCiAgICAgICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkhvc3Qi
KTsKLSAgICAgICAgaWYgKCFwYXJzZUhvc3QoYXV0aG9yaXR5T3JIb3N0QmVnaW4pKQotICAgICAg
ICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CisgICAgICAgIGlmICghcGFyc2VI
b3N0PENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGF1dGhvcml0eU9ySG9zdEJlZ2luKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlPENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGlucHV0
LCBsZW5ndGgpOwogICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICBt
X3VybC5tX3BhdGhFbmQgPSBtX3VybC5tX3BvcnRFbmQgKyAxOwogICAgICAgICBtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaCA9IG1fdXJsLm1fcGF0aEVuZDsKQEAgLTE0ODQsOCArMTUwMSw4IEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0
b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOworICAgICAgICBpZiAoIXBhcnNlSG9zdDxD
aGFyYWN0ZXJUeXBlLCBzZXJpYWxpemVkPihDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBl
PihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQorICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmU8
Q2hhcmFjdGVyVHlwZSwgc2VyaWFsaXplZD4oaW5wdXQsIGxlbmd0aCk7CiAKICAgICAgICAgaWYg
KFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBt
X2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3Qi
KSAgewogICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJpbmsobV91cmwubV9wYXNzd29yZEVu
ZCk7CkBAIC0xNTQyLDcgKzE1NTksNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFy
YWN0ZXJUeXBlCiAgICAgcmV0dXJuIG1fdXJsOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBDaGFy
YWN0ZXJUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgYm9vbCBzZXJpYWxp
emVkPgogdm9pZCBVUkxQYXJzZXI6OnBhcnNlQXV0aG9yaXR5KENvZGVQb2ludEl0ZXJhdG9yPENo
YXJhY3RlclR5cGU+IGl0ZXJhdG9yKQogewogICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CkBA
IC0xNTYzLDEwICsxNTgwLDEwIEBAIHZvaWQgVVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eShDb2Rl
UG9pbnQKICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqaXRlcmF0b3Is
IG1fYXNjaWlCdWZmZXIsIGlzSW5Vc2VySW5mb0VuY29kZVNldCk7CisgICAgICAgIHV0ZjhQZXJj
ZW50RW5jb2RlKCppdGVyYXRvciwgbV9hc2NpaUJ1ZmZlciwgaXNJblVzZXJJbmZvRW5jb2RlU2V0
LCBzZXJpYWxpemVkKTsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0
ZXJhdG9yKQotICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqaXRlcmF0b3IsIG1fYXNjaWlCdWZm
ZXIsIGlzSW5Vc2VySW5mb0VuY29kZVNldCk7CisgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpp
dGVyYXRvciwgbV9hc2NpaUJ1ZmZlciwgaXNJblVzZXJJbmZvRW5jb2RlU2V0LCBzZXJpYWxpemVk
KTsKICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAg
aWYgKCFtX3VybC5tX3VzZXJFbmQpCiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1f
cGFzc3dvcmRFbmQ7CkBAIC0xOTI5LDcgKzE5NDYsNyBAQCBpbmxpbmUgc3RhdGljIGJvb2wgaGFz
SW52YWxpZERvbWFpbkNoYXJhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgordGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgYm9v
bCBzZXJpYWxpemVkPgogYm9vbCBVUkxQYXJzZXI6OnBhcnNlUG9ydChDb2RlUG9pbnRJdGVyYXRv
cjxDaGFyYWN0ZXJUeXBlPiYgaXRlcmF0b3IpCiB7CiAgICAgdWludDMyX3QgcG9ydCA9IDA7CkBA
IC0xOTM5LDcgKzE5NTYsNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0KENvZGVQb2ludEl0
ZXJhCiAgICAgfQogICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgZm9yICg7ICFp
dGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgIGlmIChpc1RhYk9yTmV3bGlu
ZSgqaXRlcmF0b3IpKQorICAgICAgICBpZiAoIXNlcmlhbGl6ZWQgJiYgaXNUYWJPck5ld2xpbmUo
Kml0ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaXNBU0NJSURp
Z2l0KCppdGVyYXRvcikpIHsKICAgICAgICAgICAgIHBvcnQgPSBwb3J0ICogMTAgKyAqaXRlcmF0
b3IgLSAnMCc7CkBAIC0xOTU5LDcgKzE5NzYsNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0
KENvZGVQb2ludEl0ZXJhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlLCBib29sIHNl
cmlhbGl6ZWQ+CiBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENo
YXJhY3RlclR5cGU+IGl0ZXJhdG9yKQogewogICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKQpAQCAt
MTk3Niw3ICsxOTkzLDcgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVy
YQogICAgICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAgICAgICAgICAgICBpZiAoIWlwdjZF
bmQuYXRFbmQoKSAmJiAqaXB2NkVuZCA9PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICAgKytp
cHY2RW5kOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGlwdjZFbmQpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0PENoYXJhY3RlclR5cGUsIHNlcmlh
bGl6ZWQ+KGlwdjZFbmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX3Vy
bC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTE5ODgsNyArMjAwNSw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3Qo
Q29kZVBvaW50SXRlcmEKICAgICBpZiAoIW1faG9zdEhhc1BlcmNlbnRPck5vbkFTQ0lJKSB7CiAg
ICAgICAgIGF1dG8gaG9zdEl0ZXJhdG9yID0gaXRlcmF0b3I7CiAgICAgICAgIGZvciAoOyAhaXRl
cmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICAgICAgaWYgKGlzVGFiT3JOZXds
aW5lKCppdGVyYXRvcikpCisgICAgICAgICAgICBpZiAoIXNlcmlhbGl6ZWQgJiYgaXNUYWJPck5l
d2xpbmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IGlmICgqaXRlcmF0b3IgPT0gJzonKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjAwMywx
OSArMjAyMCwxNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAr
K2l0ZXJhdG9yOwotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VQb3J0PENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGl0ZXJh
dG9yKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaG9zdEl0ZXJhdG9yICE9IGl0ZXJhdG9y
OyArK2hvc3RJdGVyYXRvcikgewotICAgICAgICAgICAgaWYgKCFpc1RhYk9yTmV3bGluZSgqaG9z
dEl0ZXJhdG9yKSkKKyAgICAgICAgICAgIGlmIChzZXJpYWxpemVkIHx8ICFpc1RhYk9yTmV3bGlu
ZSgqaG9zdEl0ZXJhdG9yKSkKICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCh0
b0FTQ0lJTG93ZXIoKmhvc3RJdGVyYXRvcikpOwogICAgICAgICB9CiAgICAgICAgIG1fdXJsLm1f
aG9zdEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICBpZiAoIWhvc3RJdGVyYXRv
ci5hdEVuZCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoKmhvc3RJdGVyYXRvciA9PSAnOicpOwot
ICAgICAgICAgICAgKytob3N0SXRlcmF0b3I7Ci0gICAgICAgICAgICB3aGlsZSAoIWhvc3RJdGVy
YXRvci5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpob3N0SXRlcmF0b3IpKQotICAgICAgICAg
ICAgICAgICsraG9zdEl0ZXJhdG9yOwotICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChob3N0
SXRlcmF0b3IpOworICAgICAgICAgICAgaW5jcmVtZW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZSwg
c2VyaWFsaXplZD4oaG9zdEl0ZXJhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVBvcnQ8
Q2hhcmFjdGVyVHlwZSwgc2VyaWFsaXplZD4oaG9zdEl0ZXJhdG9yKTsKICAgICAgICAgfQogICAg
ICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC0yMDI0LDcgKzIwMzksNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0
KENvZGVQb2ludEl0ZXJhCiAgICAgLy8gRklYTUU6IFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8g
bWFrZSBzbyBtYW55IGJ1ZmZlcnMgYW5kIFN0cmluZyBjb3BpZXMuCiAgICAgU3RyaW5nQnVpbGRl
ciB1dGY4RW5jb2RlZDsKICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3Ip
IHsKLSAgICAgICAgaWYgKGlzVGFiT3JOZXdsaW5lKCppdGVyYXRvcikpCisgICAgICAgIGlmICgh
c2VyaWFsaXplZCAmJiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0yMDU1LDE3ICsyMDcwLDE1IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBv
aW50SXRlcmEKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgICsr
aXRlcmF0b3I7Ci0gICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IpOworICAgICAgICBy
ZXR1cm4gcGFyc2VQb3J0PENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGl0ZXJhdG9yKTsKICAg
ICB9CiAKICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChhc2NpaURvbWFpbkNoYXJhY3RlcnMsIGFz
Y2lpRG9tYWluVmFsdWUubGVuZ3RoKCkpOwogICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYXNjaWlC
dWZmZXIuc2l6ZSgpOwogICAgIGlmICghaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICBBU1NF
UlQoKml0ZXJhdG9yID09ICc6Jyk7Ci0gICAgICAgICsraXRlcmF0b3I7Ci0gICAgICAgIHdoaWxl
ICghaXRlcmF0b3IuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQotICAgICAg
ICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7Cisg
ICAgICAgIGluY3JlbWVudEl0ZXJhdG9yPENoYXJhY3RlclR5cGUsIHNlcmlhbGl6ZWQ+KGl0ZXJh
dG9yKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlUG9ydDxDaGFyYWN0ZXJUeXBlLCBzZXJpYWxpemVk
PihpdGVyYXRvcik7CiAgICAgfQogICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIu
c2l6ZSgpOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VVJMUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFy
c2VyLmgJKHJldmlzaW9uIDIwNjA3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBh
cnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+IGNsYXNzIEMKIGNsYXNzIFVSTFBhcnNlciB7CiBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgVVJMIHBhcnNlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFVSTCYgPSB7IH0s
IGNvbnN0IFRleHRFbmNvZGluZyYgPSBVVEY4RW5jb2RpbmcoKSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgVVJMIHBhcnNlU2VyaWFsaXplZFVSTChjb25zdCBTdHJpbmcmKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBhbGxWYWx1ZXNFcXVhbChjb25zdCBVUkwmLCBjb25zdCBVUkwmKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGVuYWJsZWQoKTsKQEAgLTUzLDExICs1
NCwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91cmxJc1NwZWNpYWwgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9ob3N0SGFzUGVyY2VudE9yTm9uQVNDSUkgeyBmYWxzZSB9OwogCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gVVJMIHBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUq
LCBjb25zdCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVSTCYsIGNvbnN0IFRleHRFbmNvZGluZyYp
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcGFyc2VBdXRob3Jp
dHkoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4pOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJh
Y3RlclR5cGU+KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBib29sIHBh
cnNlUG9ydChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IFVSTCBmYWlsdXJlKGNvbnN0IENoYXJhY3RlclR5cGUq
LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUs
IGJvb2wgc2VyaWFsaXplZD4gVVJMIHBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUqLCBjb25zdCB1
bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFVSTCYsIGNvbnN0IFRleHRFbmNvZGluZyYpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGUsIGJvb2wgc2VyaWFsaXplZD4gdm9pZCBwYXJz
ZUF1dGhvcml0eShDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZSwgYm9vbCBzZXJpYWxpemVkPiBib29sIHBhcnNlSG9z
dChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZSwgYm9vbCBzZXJpYWxpemVkPiBib29sIHBhcnNlUG9ydChDb2RlUG9p
bnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJh
Y3RlclR5cGUsIGJvb2wgc2VyaWFsaXplZD4gVVJMIGZhaWx1cmUoY29uc3QgQ2hhcmFjdGVyVHlw
ZSosIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBlbnVtIGNsYXNzIFVSTFBhcnQ7CiAgICAgdm9p
ZCBjb3B5VVJMUGFydHNVbnRpbChjb25zdCBVUkwmIGJhc2UsIFVSTFBhcnQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289268</attachid>
            <date>2016-09-19 15:52:14 -0700</date>
            <delta_ts>2016-09-19 15:54:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162228-20160919154928.patch</filename>
            <type>text/plain</type>
            <size>19903</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjEwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTA5LTE5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVVJMUGFyc2Vy
IHNob3VsZCBwYXJzZSBzZXJpYWxpemVkIHZhbGlkIFVSTHMgZmFzdGVyIHRoYW4gdW5rbm93biBp
bnB1dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYy
MjI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAgVGhlIFVS
TCBjb25zdHJ1Y3RvciB3aXRoIFBhcnNlZFVSTFN0cmluZ1RhZyBpcyBhbG1vc3QgdHdpY2UgYXMg
ZmFzdCBhcyB0aGUgb3RoZXIgVVJMIGNvbnN0cnVjdG9ycy4KKyAgICAgICAgQXNzdW1pbmcgdGhl
cmUgYXJlIG5vIHRhYnMgb3IgbmV3bGluZXMsIGFuZCBhc3N1bWluZyBjaGFyYWN0ZXJzIGFyZSBh
bHJlYWR5IGVuY29kZWQgZGVjcmVhc2VzIHRoZSBVUkxQYXJzZXIKKyAgICAgICAgcnVudGltZSBi
eSBvdmVyIDI1JSBhbmQgYWRkcyBpbmZyYXN0cnVjdHVyZSBmb3IgbW9yZSBvcHRpbWl6YXRpb25z
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAg
ICAgICAqIHBsYXRmb3JtL1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVUkw6OlVSTCk6Cisg
ICAgICAgICogcGxhdGZvcm0vVVJMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQ
ZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkp
OgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpVUkxQYXJzZXI6OnBhcnNlU2VyaWFsaXplZFVSTCk6CisgICAgICAgIChXZWJDb3JlOjppbmNy
ZW1lbnRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBhcnNlQXV0aG9y
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9VUkxQ
YXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2UpOiBEZWxldGVkLgor
CiAyMDE2LTA5LTE5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGQgc2l6ZSBhc3NlcnQgZm9yIFJlbmRlckVsZW1lbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VVJMLmNwcAkocmV2aXNpb24gMjA2MDc2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQyLDkgKzQ0Miw4IEBAIFVSTDo6VVJMKFBhcnNlZFVS
TFN0cmluZ1RhZywgY29uc3QgU3RyaW4KIHsKICAgICBpZiAoVVJMUGFyc2VyOjplbmFibGVkKCkp
IHsKICAgICAgICAgVVJMUGFyc2VyIHBhcnNlcjsKLSAgICAgICAgKnRoaXMgPSBwYXJzZXIucGFy
c2UodXJsKTsKLSAgICAgICAgQVNTRVJUKCh1cmwuaXNFbXB0eSgpICYmIG1fc3RyaW5nLmlzRW1w
dHkoKSkgfHwgdXJsID09IG1fc3RyaW5nKTsgLy8gRklYTUU6IEludmVzdGlnYXRlIHBhcnNpbmcg
bm9uLW51bGwgZW1wdHkgUGFyc2VkVVJMU3RyaW5ncy4KLSAgICB9IGVsc2UgeworICAgICAgICAq
dGhpcyA9IHBhcnNlci5wYXJzZVNlcmlhbGl6ZWRVUkwodXJsKTsKKyAgICB9IGVsc2UKICAgICAg
ICAgcGFyc2UodXJsKTsKICNpZiBPUyhXSU5ET1dTKQogICAgICAgICAvLyBGSVhNRSgxNDg1OTgp
OiBXb3JrIGFyb3VuZCBXaW5kb3dzIGxvY2FsIGZpbGUgaGFuZGxpbmcgYnVnIGluIENGTmV0d29y
awpAQCAtNDUyLDcgKzQ1MSw2IEBAIFVSTDo6VVJMKFBhcnNlZFVSTFN0cmluZ1RhZywgY29uc3Qg
U3RyaW4KICNlbHNlCiAgICAgICAgIEFTU0VSVCh1cmwgPT0gbV9zdHJpbmcpOwogI2VuZGlmCi0g
ICAgfQogfQogCiBVUkw6OlVSTChjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFN0cmluZyYgcmVsYXRp
dmUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHJldmlzaW9uIDIw
NjA3NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNSwzNiArNDM1LDUwIEBAIGlubGluZSBzdGF0aWMgdm9pZCBwZXJjZW50RW5j
b2RlKHVpbnQ4X3QKICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0
KGJ5dGUpKTsKIH0KIAordGVtcGxhdGU8Ym9vbCBzZXJpYWxpemVkPgogaW5saW5lIHN0YXRpYyB2
b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBk
ZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNvZGVTZXQpKFVDaGFyMzIpKQogewotICAgIGlmIChpc0lu
Q29kZVNldChjb2RlUG9pbnQpKSB7Ci0gICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5H
VEhdOwotICAgICAgICBpbnQzMl90IG9mZnNldCA9IDA7Ci0gICAgICAgIFVCb29sIGVycm9yID0g
ZmFsc2U7Ci0gICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwgVThfTUFYX0xFTkdUSCwg
Y29kZVBvaW50LCBlcnJvcik7Ci0gICAgICAgIC8vIEZJWE1FOiBDaGVjayBlcnJvci4KLSAgICAg
ICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpCi0gICAgICAgICAgICBwZXJj
ZW50RW5jb2RlKGJ1ZmZlcltpXSwgZGVzdGluYXRpb24pOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoaXNBU0NJSShjb2RlUG9pbnQpLCAiaXNJbkNvZGVTZXQgc2hv
dWxkIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3Igbm9uLUFTQ0lJIGNoYXJhY3RlcnMiKTsKKyAgICBp
ZiAoc2VyaWFsaXplZCkgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihpc0FTQ0lJKGNvZGVQb2ludCkpOworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTighaXNJbkNvZGVTZXQoY29kZVBvaW50KSk7CiAgICAgICAgIGRlc3RpbmF0aW9uLmFw
cGVuZChjb2RlUG9pbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChpc0luQ29kZVNldChj
b2RlUG9pbnQpKSB7CisgICAgICAgICAgICB1aW50OF90IGJ1ZmZlcltVOF9NQVhfTEVOR1RIXTsK
KyAgICAgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIFVCb29sIGVycm9y
ID0gZmFsc2U7CisgICAgICAgICAgICBVOF9BUFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01BWF9M
RU5HVEgsIGNvZGVQb2ludCwgZXJyb3IpOworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIGVy
cm9yLgorICAgICAgICAgICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgb2Zmc2V0OyArK2kpCisg
ICAgICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0sIGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXNBU0NJSShj
b2RlUG9pbnQpLCAiaXNJbkNvZGVTZXQgc2hvdWxkIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3Igbm9u
LUFTQ0lJIGNoYXJhY3RlcnMiKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2Rl
UG9pbnQpOworICAgICAgICB9CiAgICAgfQogfQogCit0ZW1wbGF0ZTxib29sIHNlcmlhbGl6ZWQ+
CiBpbmxpbmUgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeShVQ2hhcjMyIGNvZGVQ
b2ludCwgVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24pCiB7Ci0gICAgdWludDhfdCBidWZmZXJb
VThfTUFYX0xFTkdUSF07Ci0gICAgaW50MzJfdCBvZmZzZXQgPSAwOwotICAgIFVCb29sIGVycm9y
ID0gZmFsc2U7Ci0gICAgVThfQVBQRU5EKGJ1ZmZlciwgb2Zmc2V0LCBVOF9NQVhfTEVOR1RILCBj
b2RlUG9pbnQsIGVycm9yKTsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihv
ZmZzZXQgPD0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2l6ZW9mKGJ1ZmZlcikpKTsKLSAgICAvLyBG
SVhNRTogQ2hlY2sgZXJyb3IuCi0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgb2Zmc2V0OyAr
K2kpIHsKLSAgICAgICAgYXV0byBieXRlID0gYnVmZmVyW2ldOwotICAgICAgICBpZiAoc2hvdWxk
UGVyY2VudEVuY29kZVF1ZXJ5Qnl0ZShieXRlKSkKLSAgICAgICAgICAgIHBlcmNlbnRFbmNvZGUo
Ynl0ZSwgZGVzdGluYXRpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZXN0aW5hdGlv
bi5hcHBlbmQoYnl0ZSk7CisgICAgaWYgKHNlcmlhbGl6ZWQpIHsKKyAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNBU0NJSShjb2RlUG9pbnQpKTsKKyAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIXNob3VsZFBlcmNlbnRFbmNvZGVRdWVyeUJ5
dGUoY29kZVBvaW50KSk7CisgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOworICAg
ICAgICBpbnQzMl90IG9mZnNldCA9IDA7CisgICAgICAgIFVCb29sIGVycm9yID0gZmFsc2U7Cisg
ICAgICAgIFU4X0FQUEVORChidWZmZXIsIG9mZnNldCwgVThfTUFYX0xFTkdUSCwgY29kZVBvaW50
LCBlcnJvcik7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG9mZnNl
dCA8PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzaXplb2YoYnVmZmVyKSkpOworICAgICAgICAvLyBG
SVhNRTogQ2hlY2sgZXJyb3IuCisgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG9mZnNl
dDsgKytpKSB7CisgICAgICAgICAgICBhdXRvIGJ5dGUgPSBidWZmZXJbaV07CisgICAgICAgICAg
ICBpZiAoc2hvdWxkUGVyY2VudEVuY29kZVF1ZXJ5Qnl0ZShieXRlKSkKKyAgICAgICAgICAgICAg
ICBwZXJjZW50RW5jb2RlKGJ5dGUsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoYnl0ZSk7CisgICAgICAgIH0KICAgICB9
CiB9CiAgICAgCkBAIC04NjMsMTIgKzg3NywyOSBAQCBVUkwgVVJMUGFyc2VyOjpmYWlsdXJlKGNv
bnN0IENoYXJhY3RlclR5CiAKIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IFN0cmluZyYgaW5w
dXQsIGNvbnN0IFVSTCYgYmFzZSwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKKyAg
ICBjb25zdCBib29sIHNlcmlhbGl6ZWQgPSBmYWxzZTsKICAgICBpZiAoaW5wdXQuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBwYXJzZShpbnB1dC5jaGFyYWN0ZXJzOCgpLCBpbnB1dC5sZW5ndGgo
KSwgYmFzZSwgZW5jb2RpbmcpOwotICAgIHJldHVybiBwYXJzZShpbnB1dC5jaGFyYWN0ZXJzMTYo
KSwgaW5wdXQubGVuZ3RoKCksIGJhc2UsIGVuY29kaW5nKTsKKyAgICAgICAgcmV0dXJuIHBhcnNl
PHNlcmlhbGl6ZWQ+KGlucHV0LmNoYXJhY3RlcnM4KCksIGlucHV0Lmxlbmd0aCgpLCBiYXNlLCBl
bmNvZGluZyk7CisgICAgcmV0dXJuIHBhcnNlPHNlcmlhbGl6ZWQ+KGlucHV0LmNoYXJhY3RlcnMx
NigpLCBpbnB1dC5sZW5ndGgoKSwgYmFzZSwgZW5jb2RpbmcpOwogfQogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgorVVJMIFVSTFBhcnNlcjo6cGFyc2VTZXJpYWxpemVkVVJMKGNv
bnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgY29uc3QgYm9vbCBzZXJpYWxpemVkID0gdHJ1ZTsK
KyAgICBpZiAoaW5wdXQuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBwYXJzZTxzZXJpYWxpemVk
PihpbnB1dC5jaGFyYWN0ZXJzOCgpLCBpbnB1dC5sZW5ndGgoKSwgeyB9LCBVVEY4RW5jb2Rpbmco
KSk7CisgICAgcmV0dXJuIHBhcnNlPHNlcmlhbGl6ZWQ+KGlucHV0LmNoYXJhY3RlcnMxNigpLCBp
bnB1dC5sZW5ndGgoKSwgeyB9LCBVVEY4RW5jb2RpbmcoKSk7Cit9CisKK3RlbXBsYXRlPGJvb2wg
c2VyaWFsaXplZCwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3ZvaWQgaW5jcmVtZW50SXRlcmF0
b3JTa2lwcGluZ1RhYkFuZE5ld0xpbmUoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4m
IGl0ZXJhdG9yKQoreworICAgICsraXRlcmF0b3I7CisgICAgd2hpbGUgKCFzZXJpYWxpemVkICYm
ICFpdGVyYXRvci5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCppdGVyYXRvcikpCisgICAgICAg
ICsraXRlcmF0b3I7Cit9CisgICAgCit0ZW1wbGF0ZTxib29sIHNlcmlhbGl6ZWQsIHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+CiBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBl
KiBpbnB1dCwgY29uc3QgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFRl
eHRFbmNvZGluZyYgZW5jb2RpbmcpCiB7CiAgICAgTE9HKFVSTFBhcnNlciwgIlBhcnNpbmcgVVJM
IDwlcz4gYmFzZSA8JXM+IiwgU3RyaW5nKGlucHV0LCBsZW5ndGgpLnV0ZjgoKS5kYXRhKCksIGJh
c2Uuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC05MTYsNyArOTQ3LDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogCiAgICAgU3RhdGUgc3RhdGUgPSBTdGF0
ZTo6U2NoZW1lU3RhcnQ7CiAgICAgd2hpbGUgKCFjLmF0RW5kKCkpIHsKLSAgICAgICAgaWYgKGlz
VGFiT3JOZXdsaW5lKCpjKSkgeworICAgICAgICBpZiAoIXNlcmlhbGl6ZWQgJiYgaXNUYWJPck5l
d2xpbmUoKmMpKSB7CiAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQpAQCAtOTYwLDkgKzk5MSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENo
YXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwu
bV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJs
Lm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBhdXRvIG1heWJlU2xhc2ggPSBjOwot
ICAgICAgICAgICAgICAgICAgICArK21heWJlU2xhc2g7Ci0gICAgICAgICAgICAgICAgICAgIHdo
aWxlICghbWF5YmVTbGFzaC5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCptYXliZVNsYXNoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICsrbWF5YmVTbGFzaDsKKyAgICAgICAgICAgICAgICAg
ICAgaW5jcmVtZW50SXRlcmF0b3JTa2lwcGluZ1RhYkFuZE5ld0xpbmU8c2VyaWFsaXplZD4obWF5
YmVTbGFzaCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVTbGFzaC5hdEVuZCgpICYm
ICptYXliZVNsYXNoID09ICcvJykgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFm
dGVyTGFzdFNsYXNoID0gbV91cmwubV91c2VyU3RhcnQgKyAxOwpAQCAtOTgzLDkgKzEwMTIsNyBA
QCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAg
ICAgYyA9IGJlZ2luQWZ0ZXJDb250cm9sQW5kU3BhY2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICB3aGlsZSAoIWMu
YXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqYykpCi0gICAgICAgICAgICAgICAgKytjOworICAg
ICAgICAgICAgaW5jcmVtZW50SXRlcmF0b3JTa2lwcGluZ1RhYkFuZE5ld0xpbmU8c2VyaWFsaXpl
ZD4oYyk7CiAgICAgICAgICAgICBpZiAoYy5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgbV9h
c2NpaUJ1ZmZlci5jbGVhcigpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Ok5vU2No
ZW1lOwpAQCAtMTAxNSw5ICsxMDQyLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZQogICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFsUmVsYXRpdmVPckF1dGhv
cml0eSIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJykgewogICAgICAgICAgICAgICAgIG1f
YXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgKytjOwotICAgICAgICAg
ICAgICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKLSAgICAgICAg
ICAgICAgICAgICAgKytjOworICAgICAgICAgICAgICAgIGluY3JlbWVudEl0ZXJhdG9yU2tpcHBp
bmdUYWJBbmROZXdMaW5lPHNlcmlhbGl6ZWQ+KGMpOwogICAgICAgICAgICAgICAgIGlmIChjLmF0
RW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgp
OwogICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKQEAgLTEwODMsOSArMTEwOCw3IEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExP
R19TVEFURSgiU3BlY2lhbEF1dGhvcml0eVNsYXNoZXMiKTsKICAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKCIvLyIsIDIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9
PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgKytjOwotICAgICAgICAgICAgICAgIHdoaWxlICgh
Yy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKLSAgICAgICAgICAgICAgICAgICAgKytj
OworICAgICAgICAgICAgICAgIGluY3JlbWVudEl0ZXJhdG9yU2tpcHBpbmdUYWJBbmROZXdMaW5l
PHNlcmlhbGl6ZWQ+KGMpOwogICAgICAgICAgICAgICAgIGlmICghYy5hdEVuZCgpICYmICgqYyA9
PSAnLycgfHwgKmMgPT0gJ1xcJykpCiAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAg
ICAgIH0KQEAgLTExMDUsMTAgKzExMjgsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBMT0dfU1RBVEUoIkF1dGhvcml0eU9ySG9zdCIpOwog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnQCcpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyc2VBdXRob3JpdHkoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlw
ZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKTsKLSAgICAgICAgICAgICAgICAgICAgKytjOwot
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgq
YykpCi0gICAgICAgICAgICAgICAgICAgICAgICArK2M7CisgICAgICAgICAgICAgICAgICAgIHBh
cnNlQXV0aG9yaXR5PHNlcmlhbGl6ZWQ+KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+
KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSk7CisgICAgICAgICAgICAgICAgICAgIGluY3JlbWVu
dEl0ZXJhdG9yU2tpcHBpbmdUYWJBbmROZXdMaW5lPHNlcmlhbGl6ZWQ+KGMpOwogICAgICAgICAg
ICAgICAgICAgICBhdXRob3JpdHlPckhvc3RCZWdpbiA9IGM7CiAgICAgICAgICAgICAgICAgICAg
IHN0YXRlID0gU3RhdGU6Okhvc3Q7CiAgICAgICAgICAgICAgICAgICAgIG1faG9zdEhhc1BlcmNl
bnRPck5vbkFTQ0lJID0gZmFsc2U7CkBAIC0xMTE4LDcgKzExMzksNyBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgaWYgKGlzU2xhc2gg
fHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJykgewogICAgICAgICAgICAgICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91
cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5
T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3Q8c2Vy
aWFsaXplZD4oQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0
QmVnaW4sIGMpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0
LCBsZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU2xhc2gpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CkBAIC0xMTM1LDcgKzEx
NTYsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAg
IGNhc2UgU3RhdGU6Okhvc3Q6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIkhvc3QiKTsKICAgICAg
ICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJykgewotICAgICAg
ICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+
KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhv
c3Q8c2VyaWFsaXplZD4oQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5
T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5w
dXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTEyNjUsNyArMTI4Niw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6UGF0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3Rl
clR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCisgICAgICAgICAgICAgICAgaWYgKCFw
YXJzZUhvc3Q8c2VyaWFsaXplZD4oQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0
aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1
cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYg
KFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBt
X2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3Qi
KSAgewpAQCAtMTMyNyw3ICsxMzQ4LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2FzY2lp
QnVmZmVyLCBpc0luRGVmYXVsdEVuY29kZVNldCk7CisgICAgICAgICAgICB1dGY4UGVyY2VudEVu
Y29kZTxzZXJpYWxpemVkPigqYywgbV9hc2NpaUJ1ZmZlciwgaXNJbkRlZmF1bHRFbmNvZGVTZXQp
OwogICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3Rh
dGU6OkNhbm5vdEJlQUJhc2VVUkxQYXRoOgpAQCAtMTM0MCw3ICsxMzYxLDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIG1fdXJsLm1f
cXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6RnJhZ21lbnQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHV0ZjhQ
ZXJjZW50RW5jb2RlKCpjLCBtX2FzY2lpQnVmZmVyLCBpc0luU2ltcGxlRW5jb2RlU2V0KTsKKyAg
ICAgICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZTxzZXJpYWxpemVkPigqYywgbV9hc2NpaUJ1
ZmZlciwgaXNJblNpbXBsZUVuY29kZVNldCk7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzU0LDcgKzEzNzUsNyBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNVVEY4RW5jb2RpbmcpCi0gICAgICAg
ICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeSgqYywgbV9hc2NpaUJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeTxzZXJpYWxpemVkPigqYywgbV9hc2Np
aUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcXVlcnlCdWZmZXIu
YXBwZW5kKCpjKTsKICAgICAgICAgICAgICsrYzsKQEAgLTE0MzAsNyArMTQ1MSw3IEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICBjYXNlIFN0YXRlOjpIb3N0
OgogICAgICAgICBpZiAoc3RhdGUgPT0gU3RhdGU6Okhvc3QpCiAgICAgICAgICAgICBMT0dfRklO
QUxfU1RBVEUoIkhvc3QiKTsKLSAgICAgICAgaWYgKCFwYXJzZUhvc3QoYXV0aG9yaXR5T3JIb3N0
QmVnaW4pKQorICAgICAgICBpZiAoIXBhcnNlSG9zdDxzZXJpYWxpemVkPihhdXRob3JpdHlPckhv
c3RCZWdpbikpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAg
ICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgbV91cmwubV9wYXRoRW5k
ID0gbV91cmwubV9wb3J0RW5kICsgMTsKQEAgLTE0ODQsNyArMTUwNSw3IEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKKyAgICAgICAgaWYgKCFwYXJzZUhvc3Q8
c2VyaWFsaXplZD4oQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JI
b3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgp
OwogCiAgICAgICAgIGlmIChTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpICsgbV91cmwu
bV9wYXNzd29yZEVuZCwgbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5k
KSA9PSAibG9jYWxob3N0IikgIHsKQEAgLTE1NDIsNyArMTU2Myw3IEBAIFVSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICByZXR1cm4gbV91cmw7CiB9CiAKLXRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit0ZW1wbGF0ZTxib29sIHNlcmlhbGl6ZWQsIHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CiB2b2lkIFVSTFBhcnNlcjo6cGFyc2VBdXRob3JpdHkoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgaWYgKGl0ZXJh
dG9yLmF0RW5kKCkpIHsKQEAgLTE1NjMsMTAgKzE1ODQsMTAgQEAgdm9pZCBVUkxQYXJzZXI6OnBh
cnNlQXV0aG9yaXR5KENvZGVQb2ludAogICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
JzonKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHV0ZjhQZXJjZW50
RW5jb2RlKCppdGVyYXRvciwgbV9hc2NpaUJ1ZmZlciwgaXNJblVzZXJJbmZvRW5jb2RlU2V0KTsK
KyAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGU8c2VyaWFsaXplZD4oKml0ZXJhdG9yLCBtX2FzY2lp
QnVmZmVyLCBpc0luVXNlckluZm9FbmNvZGVTZXQpOwogICAgIH0KICAgICBmb3IgKDsgIWl0ZXJh
dG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpCi0gICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCppdGVy
YXRvciwgbV9hc2NpaUJ1ZmZlciwgaXNJblVzZXJJbmZvRW5jb2RlU2V0KTsKKyAgICAgICAgdXRm
OFBlcmNlbnRFbmNvZGU8c2VyaWFsaXplZD4oKml0ZXJhdG9yLCBtX2FzY2lpQnVmZmVyLCBpc0lu
VXNlckluZm9FbmNvZGVTZXQpOwogICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKICAgICBpZiAoIW1fdXJsLm1fdXNlckVuZCkKICAgICAgICAgbV91cmwubV91
c2VyRW5kID0gbV91cmwubV9wYXNzd29yZEVuZDsKQEAgLTE5MjksNyArMTk1MCw3IEBAIGlubGlu
ZSBzdGF0aWMgYm9vbCBoYXNJbnZhbGlkRG9tYWluQ2hhcmEKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit0ZW1wbGF0ZTxib29sIHNlcmlh
bGl6ZWQsIHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBib29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0
KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+JiBpdGVyYXRvcikKIHsKICAgICB1aW50
MzJfdCBwb3J0ID0gMDsKQEAgLTE5MzksNyArMTk2MCw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJz
ZVBvcnQoQ29kZVBvaW50SXRlcmEKICAgICB9CiAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzon
KTsKICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpIHsKLSAgICAgICAg
aWYgKGlzVGFiT3JOZXdsaW5lKCppdGVyYXRvcikpCisgICAgICAgIGlmICghc2VyaWFsaXplZCAm
JiBpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGlmIChpc0FTQ0lJRGlnaXQoKml0ZXJhdG9yKSkgewogICAgICAgICAgICAgcG9ydCA9IHBv
cnQgKiAxMCArICppdGVyYXRvciAtICcwJzsKQEAgLTE5NTksNyArMTk4MCw3IEBAIGJvb2wgVVJM
UGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3RlbXBsYXRlPGJvb2wgc2VyaWFsaXpl
ZCwgdHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7CiAgICAgaWYgKGl0ZXJh
dG9yLmF0RW5kKCkpCkBAIC0xOTc2LDcgKzE5OTcsNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VI
b3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgICAgICAgICAgKytpcHY2RW5kOwogICAgICAgICAg
ICAgICAgIGlmICghaXB2NkVuZC5hdEVuZCgpICYmICppcHY2RW5kID09ICc6JykgewogICAgICAg
ICAgICAgICAgICAgICArK2lwdjZFbmQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJz
ZVBvcnQoaXB2NkVuZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVBvcnQ8c2Vy
aWFsaXplZD4oaXB2NkVuZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1f
dXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMTk4OCw3ICsyMDA5LDcgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9z
dChDb2RlUG9pbnRJdGVyYQogICAgIGlmICghbV9ob3N0SGFzUGVyY2VudE9yTm9uQVNDSUkpIHsK
ICAgICAgICAgYXV0byBob3N0SXRlcmF0b3IgPSBpdGVyYXRvcjsKICAgICAgICAgZm9yICg7ICFp
dGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7Ci0gICAgICAgICAgICBpZiAoaXNUYWJPck5l
d2xpbmUoKml0ZXJhdG9yKSkKKyAgICAgICAgICAgIGlmICghc2VyaWFsaXplZCAmJiBpc1RhYk9y
TmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgaWYgKCppdGVyYXRvciA9PSAnOicpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDAz
LDE5ICsyMDI0LDE3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEK
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICsraXRlcmF0b3I7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGl0ZXJhdG9yKTsKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZVBvcnQ8c2VyaWFsaXplZD4oaXRlcmF0b3IpOwogICAgICAg
ICB9CiAgICAgICAgIGZvciAoOyBob3N0SXRlcmF0b3IgIT0gaXRlcmF0b3I7ICsraG9zdEl0ZXJh
dG9yKSB7Ci0gICAgICAgICAgICBpZiAoIWlzVGFiT3JOZXdsaW5lKCpob3N0SXRlcmF0b3IpKQor
ICAgICAgICAgICAgaWYgKHNlcmlhbGl6ZWQgfHwgIWlzVGFiT3JOZXdsaW5lKCpob3N0SXRlcmF0
b3IpKQogICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigq
aG9zdEl0ZXJhdG9yKSk7CiAgICAgICAgIH0KICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmICghaG9zdEl0ZXJhdG9yLmF0RW5kKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVCgqaG9zdEl0ZXJhdG9yID09ICc6Jyk7Ci0gICAgICAgICAgICAr
K2hvc3RJdGVyYXRvcjsKLSAgICAgICAgICAgIHdoaWxlICghaG9zdEl0ZXJhdG9yLmF0RW5kKCkg
JiYgaXNUYWJPck5ld2xpbmUoKmhvc3RJdGVyYXRvcikpCi0gICAgICAgICAgICAgICAgKytob3N0
SXRlcmF0b3I7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGhvc3RJdGVyYXRvcik7Cisg
ICAgICAgICAgICBpbmNyZW1lbnRJdGVyYXRvclNraXBwaW5nVGFiQW5kTmV3TGluZTxzZXJpYWxp
emVkPihob3N0SXRlcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydDxzZXJpYWxp
emVkPihob3N0SXRlcmF0b3IpOwogICAgICAgICB9CiAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIwMjQsNyAr
MjA0Myw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAv
LyBGSVhNRTogV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBtYWtlIHNvIG1hbnkgYnVmZmVycyBh
bmQgU3RyaW5nIGNvcGllcy4KICAgICBTdHJpbmdCdWlsZGVyIHV0ZjhFbmNvZGVkOwogICAgIGZv
ciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewotICAgICAgICBpZiAoaXNUYWJP
ck5ld2xpbmUoKml0ZXJhdG9yKSkKKyAgICAgICAgaWYgKCFzZXJpYWxpemVkICYmIGlzVGFiT3JO
ZXdsaW5lKCppdGVyYXRvcikpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCpp
dGVyYXRvciA9PSAnOicpCiAgICAgICAgICAgICBicmVhazsKQEAgLTIwNTUsMTcgKzIwNzQsMTUg
QEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyYXRvcjsKLSAgICAgICAgcmV0
dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CisgICAgICAgIHJldHVybiBwYXJzZVBvcnQ8c2VyaWFs
aXplZD4oaXRlcmF0b3IpOwogICAgIH0KIAogICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKGFzY2lp
RG9tYWluQ2hhcmFjdGVycywgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSk7CiAgICAgbV91cmwu
bV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgaWYgKCFpdGVyYXRvci5hdEVu
ZCgpKSB7CiAgICAgICAgIEFTU0VSVCgqaXRlcmF0b3IgPT0gJzonKTsKLSAgICAgICAgKytpdGVy
YXRvcjsKLSAgICAgICAgd2hpbGUgKCFpdGVyYXRvci5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5l
KCppdGVyYXRvcikpCi0gICAgICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICByZXR1cm4gcGFy
c2VQb3J0KGl0ZXJhdG9yKTsKKyAgICAgICAgaW5jcmVtZW50SXRlcmF0b3JTa2lwcGluZ1RhYkFu
ZE5ld0xpbmU8c2VyaWFsaXplZD4oaXRlcmF0b3IpOworICAgICAgICByZXR1cm4gcGFyc2VQb3J0
PHNlcmlhbGl6ZWQ+KGl0ZXJhdG9yKTsKICAgICB9CiAgICAgbV91cmwubV9wb3J0RW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjA2MDc1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gY2xhc3MgQwogY2xhc3MgVVJMUGFyc2VyIHsKIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBVUkwgcGFyc2UoY29uc3QgU3RyaW5nJiwgY29uc3Qg
VVJMJiA9IHsgfSwgY29uc3QgVGV4dEVuY29kaW5nJiA9IFVURjhFbmNvZGluZygpKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBVUkwgcGFyc2VTZXJpYWxpemVkVVJMKGNvbnN0IFN0cmluZyYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGFsbFZhbHVlc0VxdWFsKGNvbnN0IFVSTCYsIGNv
bnN0IFVSTCYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZW5hYmxlZCgpOwpA
QCAtNTMsMTAgKzU0LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VybElzU3BlY2lhbCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2hvc3RIYXNQZXJjZW50T3JOb25BU0NJSSB7IGZhbHNlIH07CiAK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBVUkwgcGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZSosIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgVVJMJiwgY29uc3QgVGV4
dEVuY29kaW5nJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gdm9pZCBw
YXJzZUF1dGhvcml0eShDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gYm9vbCBwYXJzZUhvc3QoQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4pOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5
cGU+IGJvb2wgcGFyc2VQb3J0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+Jik7Cisg
ICAgdGVtcGxhdGU8Ym9vbCBzZXJpYWxpemVkLCB0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiBVUkwg
cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZSosIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCwgY29uc3Qg
VVJMJiwgY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgdGVtcGxhdGU8Ym9vbCBzZXJpYWxpemVk
LCB0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPiB2b2lkIHBhcnNlQXV0aG9yaXR5KENvZGVQb2ludEl0
ZXJhdG9yPENoYXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTxib29sIHNlcmlhbGl6ZWQsIHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+IGJvb2wgcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENo
YXJhY3RlclR5cGU+KTsKKyAgICB0ZW1wbGF0ZTxib29sIHNlcmlhbGl6ZWQsIHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGJvb2wgcGFyc2VQb3J0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5
cGU+Jik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gVVJMIGZhaWx1cmUo
Y29uc3QgQ2hhcmFjdGVyVHlwZSosIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICBlbnVtIGNsYXNz
IFVSTFBhcnQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>