<?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>46563</bug_id>
          
          <creation_ts>2010-09-25 03:50:48 -0700</creation_ts>
          <short_desc>Fix DirectoryReader&apos;s behavior to trigger only one EntriesCallback per readEntries</short_desc>
          <delta_ts>2010-09-30 13:39:33 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>42903</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dumi</cc>
    
    <cc>ericu</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284984</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-25 03:50:48 -0700</bug_when>
    <thetext>Current implementation assumes one DirectoryReader.readEntries() may triger multiple EntriesCallbacks (for each entries chunk) ending with an empty Entry array, but what the spec says is that one readEntries should yield only one EntriesCallback and we must maintain the status between multiple readEntries.
http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-directoryreader-interface

Currently the browser implementation doesn&apos;t support chunk reading, but we still trigger EntriesCallback twice for each readEntries() -- one for returning entries and the other one for an empty array to indicate the end.   We should fix (a work-around fix for now) this behavior at least to make it conform to the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284985</commentid>
    <comment_count>1</comment_count>
      <attachid>68822</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-25 04:00:58 -0700</bug_when>
    <thetext>Created attachment 68822
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284986</commentid>
    <comment_count>2</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-25 04:03:41 -0700</bug_when>
    <thetext>Note that this patch is only for a work-around fix and we&apos;ll need more complete fix in WebKit API, browser code and WebCore code to make it work with chunk reading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285283</commentid>
    <comment_count>3</comment_count>
      <attachid>68822</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-09-26 21:16:54 -0700</bug_when>
    <thetext>Comment on attachment 68822
Patch

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

&gt; WebCore/ChangeLog:8
&gt; +        No new tests; will update the layout-test patch (not yet submitted) for this fix.

Usually we include the updated layout tests in the same patch so the reviewer can see the effect of your patch and verify that everything is properly tested.

&gt; WebCore/fileapi/DOMFileSystem.h:93
&gt;      // Schedule a callback. This should not cross threads (should be called on the same context thread).
&gt;      template &lt;typename CB, typename CBArg&gt;
&gt;      static void scheduleCallback(ScriptExecutionContext*, PassRefPtr&lt;CB&gt;, PassRefPtr&lt;CBArg&gt;);
&gt;  
&gt; +    template &lt;typename CB, typename CBArg&gt;
&gt; +    void scheduleCallback(PassRefPtr&lt;CB&gt; callback, PassRefPtr&lt;CBArg&gt; callbackArg)
&gt; +    {
&gt; +        scheduleCallback(scriptExecutionContext(), callback, callbackArg);
&gt; +    }

This seems super general.  Why is this definition trapped inside the fileapi directory?

&gt; WebCore/fileapi/DirectoryReader.cpp:53
&gt; +    if (m_hasMore)
&gt; +        m_fileSystem-&gt;readDirectory(this, m_fullPath, entriesCallback, errorCallback);

We prefer early return.

&gt; WebCore/fileapi/DirectoryReader.cpp:55
&gt; +        // If there&apos;re no more entries, dispatch a callback with an empty array.

This comment is redundant with the code.

&gt; WebCore/fileapi/DirectoryReader.h:54
&gt; +    DOMFileSystem* filesystem() { return m_fileSystem.get(); }

DOMFileSystem* filesystem() const

&gt; WebCore/fileapi/DirectoryReader.h:59
&gt; +    void setHasMore(bool hasMore) { m_hasMore = hasMore; }

Why do we have a private setter?  Is this function called anywhere?

&gt; WebCore/fileapi/FileSystemCallbacks.cpp:167
&gt; +        m_directoryReader-&gt;setHasMore(hasMore);

I see.  It&apos;s called here.  By why do you have a private setter if this class is a friend?  We should either get rid of the setter or make the setting public and make this class not a friend.

&gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp:79
&gt; +    delete this;

Hum...  delete this is generally a sign that ownership isn&apos;t worked out properly...  Can we use OwnPtr instead?  How do we know this doesn&apos;t leak?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286053</commentid>
    <comment_count>4</comment_count>
      <attachid>69018</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-27 21:42:26 -0700</bug_when>
    <thetext>Created attachment 69018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286058</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-27 21:48:53 -0700</bug_when>
    <thetext>Thanks for your review,

(In reply to comment #3)
&gt; (From update of attachment 68822 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=68822&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:8
&gt; &gt; +        No new tests; will update the layout-test patch (not yet submitted) for this fix.
&gt; 
&gt; Usually we include the updated layout tests in the same patch so the reviewer can see the effect of your patch and verify that everything is properly tested.

I added a layout test for this one.

&gt; &gt; WebCore/fileapi/DOMFileSystem.h:93
&gt; &gt;      // Schedule a callback. This should not cross threads (should be called on the same context thread).
&gt; &gt;      template &lt;typename CB, typename CBArg&gt;
&gt; &gt;      static void scheduleCallback(ScriptExecutionContext*, PassRefPtr&lt;CB&gt;, PassRefPtr&lt;CBArg&gt;);
&gt; &gt;  
&gt; &gt; +    template &lt;typename CB, typename CBArg&gt;
&gt; &gt; +    void scheduleCallback(PassRefPtr&lt;CB&gt; callback, PassRefPtr&lt;CBArg&gt; callbackArg)
&gt; &gt; +    {
&gt; &gt; +        scheduleCallback(scriptExecutionContext(), callback, callbackArg);
&gt; &gt; +    }
&gt; 
&gt; This seems super general.  Why is this definition trapped inside the fileapi directory?

Because there hadn&apos;t been many APIs that use callbacks this much? (afaik database is the only other one that uses callbacks.)
I added FIXME comment to put it in a more generic place.  Or if you have any suggestions I&apos;ll move it there.

&gt; &gt; WebCore/fileapi/DirectoryReader.cpp:53
&gt; &gt; +    if (m_hasMore)
&gt; &gt; +        m_fileSystem-&gt;readDirectory(this, m_fullPath, entriesCallback, errorCallback);
&gt; We prefer early return.

Fixed.

&gt; &gt; WebCore/fileapi/DirectoryReader.cpp:55
&gt; &gt; +        // If there&apos;re no more entries, dispatch a callback with an empty array.
&gt; This comment is redundant with the code.

Removed.

&gt; &gt; WebCore/fileapi/DirectoryReader.h:54
&gt; &gt; +    DOMFileSystem* filesystem() { return m_fileSystem.get(); }
&gt; DOMFileSystem* filesystem() const

Fixed.

&gt; &gt; WebCore/fileapi/DirectoryReader.h:59
&gt; &gt; +    void setHasMore(bool hasMore) { m_hasMore = hasMore; }
&gt; Why do we have a private setter?  Is this function called anywhere?
&gt; &gt; WebCore/fileapi/FileSystemCallbacks.cpp:167
&gt; &gt; +        m_directoryReader-&gt;setHasMore(hasMore);
&gt; I see.  It&apos;s called here.  By why do you have a private setter if this class is a friend?  We should either get rid of the setter or make the setting public and make this class not a friend.

Changed the setter to public.

&gt; &gt; WebKit/chromium/src/WebFileSystemCallbacksImpl.cpp:79
&gt; &gt; +    delete this;
&gt; 
&gt; Hum...  delete this is generally a sign that ownership isn&apos;t worked out properly...  Can we use OwnPtr instead?  How do we know this doesn&apos;t leak?

WebFileSystemCallbacksImpl implements WebFileSystemCallbacks, whose instances are passed to outside the WebKit API (i.e. chromium) to get called back eventually.
The API&apos;s comment explicitly states that the caller must fire any of the callbacks (to avoid leaks).
That&apos;s why I made it self-destructed upon callbacks -- does that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286060</commentid>
    <comment_count>6</comment_count>
      <attachid>69019</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-27 21:52:18 -0700</bug_when>
    <thetext>Created attachment 69019
Patch

Removed duplicated ChangeLog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286972</commentid>
    <comment_count>7</comment_count>
      <attachid>69215</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-29 10:43:40 -0700</bug_when>
    <thetext>Created attachment 69215
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287120</commentid>
    <comment_count>8</comment_count>
      <attachid>69215</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-09-29 14:25:57 -0700</bug_when>
    <thetext>Comment on attachment 69215
Patch

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

PLease consider fixing the following before landing this change.

&gt; LayoutTests/fast/filesystem/resources/fs-test-util.js:18
&gt; +// FIXME: replace this with the API&apos;s one once the backend fully supports removeRecursively.

I had a hard time understanding this comment. Is this the same idea?

// FIXME: replace this code with the equivalent File API method once the it fully supports removeRecursively.

&gt; WebCore/fileapi/DirectoryReader.h:45
&gt; +class EntriesCallbacks;

Please sort.

&gt; WebCore/fileapi/FileSystemCallbacks.cpp:167
&gt; +        m_directoryReader-&gt;setHasMore(hasMore);

Why is this call only done if m_successCallback is set? It seems like it should always be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287124</commentid>
    <comment_count>9</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-09-29 14:28:01 -0700</bug_when>
    <thetext>Also, I suggested getting another set of eyes on js code in the test. Please do any minor changes that result from that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287285</commentid>
    <comment_count>10</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-09-29 18:17:02 -0700</bug_when>
    <thetext>Committed r68735: &lt;http://trac.webkit.org/changeset/68735&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68822</attachid>
            <date>2010-09-25 04:00:58 -0700</date>
            <delta_ts>2010-09-27 21:42:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46563-20100925040057.patch</filename>
            <type>text/plain</type>
            <size>13192</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODk4YmUwMjFmODBmYzM0NGE3ODg3ZjY3M2ZkNDg4MDc4YzFjMTIxZi4uMjk0YTE4YjNmZTNhYTFm
ZWE0NjVhN2NlYmQ5ZTk2YzNkMDZkZDAzMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAxMC0wOS0yNSAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IERpcmVjdG9yeVJlYWRlcidzIGJlaGF2aW9y
IHRvIHRyaWdnZXIgb25seSBvbmUgRW50cmllc0NhbGxiYWNrIHBlciByZWFkRW50cmllcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY1NjMKKworICAg
ICAgICBObyBuZXcgdGVzdHM7IHdpbGwgdXBkYXRlIHRoZSBsYXlvdXQtdGVzdCBwYXRjaCAobm90
IHlldCBzdWJtaXR0ZWQpIGZvciB0aGlzIGZpeC4KKworICAgICAgICAqIGZpbGVhcGkvRE9NRmls
ZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0
b3J5KTogQ2hhbmdlZCB0byB0YWtlIERpcmVjdG9yeVJlYWRlcgorICAgICAgICBhcyBhIHBhcmFt
ZXRlci4KKyAgICAgICAgKiBmaWxlYXBpL0RPTUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdlYkNv
cmU6OkRPTUZpbGVTeXN0ZW06OnNjaGVkdWxlQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBm
aWxlYXBpL0RpcmVjdG9yeVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlS
ZWFkZXI6OkRpcmVjdG9yeVJlYWRlcik6IEFkZGVkIGluaXRpYWxpemVyIGZvcgorICAgICAgICBt
X2hhc01vcmUgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdG9yeVJlYWRlcjo6cmVhZEVu
dHJpZXMpOiBDaGFuZ2VkIHRvIHNjaGVkdWxlCisgICAgICAgIEVudHJpZXNDYWxsYmFjayB3aXRo
IGFuIGVtcHR5IGFycmF5IGlmIG1faGFzTW9yZSBmbGFnIGlzIHNldCBmYWxzZS4KKyAgICAgICAg
KiBmaWxlYXBpL0RpcmVjdG9yeVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0b3J5
UmVhZGVyOjpmaWxlc3lzdGVtKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlS
ZWFkZXI6OnNldEhhc01vcmUpOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1D
YWxsYmFja3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RW50cmllc0NhbGxiYWNrczo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVudHJpZXNDYWxsYmFja3M6OkVudHJpZXNDYWxsYmFja3Mp
OiBDaGFuZ2VkIHRvIHRha2UKKyAgICAgICAgRGlyZWN0b3J5UmVhZGVyIGFzIGEgcGFyYW1ldGVy
LgorICAgICAgICAoV2ViQ29yZTo6RW50cmllc0NhbGxiYWNrczo6ZGlkUmVhZERpcmVjdG9yeUVu
dHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWREaXJlY3Rv
cnlFbnRyaWVzKTogQ2hhbmdlZCAxKSBub3QgdG8KKyAgICAgICAgdHJpZ2dlciB0aGUgc2Vjb25k
IGNhbGxiYWNrIHdoZW4gaGFzTW9yZSBpcyBmYWxzZSwgYW5kIDIpIHRvIHVwZGF0ZQorICAgICAg
ICB0aGUgRGlyZWN0b3J5UmVhZGVyJ3MgbV9oYXNNb3JlIGZsYWcuCisgICAgICAgICogZmlsZWFw
aS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmg6CisKIDIwMTAtMDktMjUgIEtpbnVrbyBZYXN1ZGEgIDxr
aW51a29AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCBiL1dlYkNvcmUv
ZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcAppbmRleCAyYmQwOWMyZjBkZWNmN2I1MGZmYmQ4NDNi
NjA0ZWExMWI0OTVkNGRhLi5iMWIxY2RjMTFlNmRlNTNhMWU4NWJlYmUzYzU2YjNmZWU4ZDQ0MGRk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKKysrIGIvV2Vi
Q29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCkBAIC0yMTQsMTEgKzIxNCwxMSBAQCB2b2lk
IERPTUZpbGVTeXN0ZW06OmNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGUsIFBhc3NS
ZWZQdHI8RmlsZVdyaXRlckNhbAogICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVXcml0ZXIo
ZmlsZVdyaXRlci5nZXQoKSwgcGxhdGZvcm1QYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKIH0K
IAotdm9pZCBET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwg
UGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrKQordm9pZCBET01GaWxlU3lzdGVtOjpyZWFkRGly
ZWN0b3J5KERpcmVjdG9yeVJlYWRlciogcmVhZGVyLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NS
ZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JD
YWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKICAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJz
b2x1dGUocGF0aCkpOwogICAgIFN0cmluZyBwbGF0Zm9ybVBhdGggPSBtX2FzeW5jRmlsZVN5c3Rl
bS0+dmlydHVhbFRvUGxhdGZvcm1QYXRoKHBhdGgpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5y
ZWFkRGlyZWN0b3J5KHBsYXRmb3JtUGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nl
c3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgdGhpcywgcGF0aCkpOworICAgIG1fYXN5bmNGaWxl
U3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBsYXRmb3JtUGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3Jl
YXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcmVhZGVyLCBwYXRoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3Rl
bS5oIGIvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uaAppbmRleCA4ODFmZmM1OTM5MjQ5
MDZkYmNhNWM4Y2Q5MzJmNjJjZDViOGFhMDFkLi5iNjRhOWY2Zjk1N2RmZGQwMWUyNmYxOTc1NDE4
YTEwMTlkZDRjNjdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5o
CisrKyBiL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgKQEAgLTQ0LDYgKzQ0LDcgQEAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRGlyZWN0b3J5RW50cnk7CitjbGFzcyBEaXJl
Y3RvcnlSZWFkZXI7CiBjbGFzcyBFbnRyeTsKIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CiBjbGFzcyBF
bnRyaWVzQ2FsbGJhY2s7CkBAIC03OCwxMyArNzksMTkgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0
UGFyZW50KGNvbnN0IEVudHJ5KiBlbnRyeSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAgICAgdm9pZCBnZXRGaWxlKGNvbnN0IEVudHJ5KiBi
YXNlLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8RmxhZ3M+LCBQYXNzUmVmUHRyPEVu
dHJ5Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2b2lkIGdldERp
cmVjdG9yeShjb25zdCBFbnRyeSogYmFzZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRy
PEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPik7Ci0gICAgdm9pZCByZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1Jl
ZlB0cjxFbnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICB2
b2lkIHJlYWREaXJlY3RvcnkoRGlyZWN0b3J5UmVhZGVyKiByZWFkZXIsIGNvbnN0IFN0cmluZyYg
cGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+KTsKICAgICB2b2lkIGNyZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGUsIFBhc3NS
ZWZQdHI8RmlsZVdyaXRlckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAK
ICAgICAvLyBTY2hlZHVsZSBhIGNhbGxiYWNrLiBUaGlzIHNob3VsZCBub3QgY3Jvc3MgdGhyZWFk
cyAoc2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSBjb250ZXh0IHRocmVhZCkuCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KICAgICBzdGF0aWMgdm9pZCBzY2hl
ZHVsZUNhbGxiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPENCPiwgUGFz
c1JlZlB0cjxDQkFyZz4pOwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENCLCB0eXBlbmFtZSBD
QkFyZz4KKyAgICB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soUGFzc1JlZlB0cjxDQj4gY2FsbGJhY2ss
IFBhc3NSZWZQdHI8Q0JBcmc+IGNhbGxiYWNrQXJnKQorICAgIHsKKyAgICAgICAgc2NoZWR1bGVD
YWxsYmFjayhzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNhbGxiYWNrLCBjYWxsYmFja0FyZyk7
CisgICAgfQorCiBwcml2YXRlOgogICAgIERPTUZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+KTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeVJlYWRlci5jcHAgYi9XZWJD
b3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcAppbmRleCBiMGVlZjFjYzQ5Mjc2ZjMzYzc5
NDBlNjY5MmNhMmY1ZDYwMGYwNTE1Li5mY2Q2ZmJhMjM0ZDgxMDAyMzc5ZDU1MjQ4NTJkOGQ3MzUz
OTkzNGM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcAor
KysgYi9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogCiAjaW5jbHVkZSAiRE9NRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkVudHJpZXNDYWxsYmFj
ay5oIgorI2luY2x1ZGUgIkVudHJ5QXJyYXkuaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQyLDEyICs0MywxOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBEaXJlY3RvcnlSZWFkZXI6OkRpcmVjdG9yeVJlYWRlcihQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW0+IGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpCiAgICAgOiBtX2Zp
bGVTeXN0ZW0oZmlsZVN5c3RlbSkKICAgICAsIG1fZnVsbFBhdGgoZnVsbFBhdGgpCisgICAgLCBt
X2hhc01vcmUodHJ1ZSkKIHsKIH0KIAogdm9pZCBEaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRyaWVz
KFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBlbnRyaWVzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKLSAgICBtX2ZpbGVTeXN0ZW0tPnJlYWRE
aXJlY3RvcnkobV9mdWxsUGF0aCwgZW50cmllc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAg
ICBpZiAobV9oYXNNb3JlKQorICAgICAgICBtX2ZpbGVTeXN0ZW0tPnJlYWREaXJlY3RvcnkodGhp
cywgbV9mdWxsUGF0aCwgZW50cmllc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gSWYgdGhlcmUncmUgbm8gbW9yZSBlbnRyaWVzLCBkaXNwYXRjaCBhIGNh
bGxiYWNrIHdpdGggYW4gZW1wdHkgYXJyYXkuCisgICAgICAgIG1fZmlsZVN5c3RlbS0+c2NoZWR1
bGVDYWxsYmFjayhlbnRyaWVzQ2FsbGJhY2ssIEVudHJ5QXJyYXk6OmNyZWF0ZSgpKTsKKyAgICB9
CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0
b3J5UmVhZGVyLmggYi9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmgKaW5kZXggMGUy
ZWYwZjZjZDIyOWNkZDRkOTU3ZTFlZjViMjc0YTU4YzYzOTFkMC4uMzk3MDUxOTQzMzA2Y2RkMTli
YzRhMWMyYzcxOGY5N2Q4NzQ4NWI5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0RpcmVj
dG9yeVJlYWRlci5oCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFkZXIuaApAQCAt
NDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVudHJpZXNDYWxsYmFj
azsKIGNsYXNzIEVycm9yQ2FsbGJhY2s7CitjbGFzcyBFbnRyaWVzQ2FsbGJhY2tzOwogCiBjbGFz
cyBEaXJlY3RvcnlSZWFkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxEaXJlY3RvcnlSZWFkZXI+IHsK
IHB1YmxpYzoKQEAgLTUwLDEzICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRGlyZWN0b3J5UmVhZGVyKGZpbGVTeXN0ZW0sIHBhdGgpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHJlYWRFbnRyaWVzKFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2Fs
bGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IDApOworICAg
IERPTUZpbGVTeXN0ZW0qIGZpbGVzeXN0ZW0oKSB7IHJldHVybiBtX2ZpbGVTeXN0ZW0uZ2V0KCk7
IH0KKyAgICB2b2lkIHJlYWRFbnRyaWVzKFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPiA9IDApOwogCiBwcml2YXRlOgogICAgIERpcmVjdG9yeVJl
YWRlcihQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+IGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYg
cGF0aCk7CisgICAgdm9pZCBzZXRIYXNNb3JlKGJvb2wgaGFzTW9yZSkgeyBtX2hhc01vcmUgPSBo
YXNNb3JlOyB9CisKKyAgICBmcmllbmQgY2xhc3MgRW50cmllc0NhbGxiYWNrczsKIAogICAgIFJl
ZlB0cjxET01GaWxlU3lzdGVtPiBtX2ZpbGVTeXN0ZW07CiAgICAgU3RyaW5nIG1fZnVsbFBhdGg7
CisgICAgYm9vbCBtX2hhc01vcmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwIGIvV2ViQ29yZS9maWxlYXBp
L0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwCmluZGV4IDU1MGI1MDliNGI5NTNiOTQ2NDliMGJkYTM2
NDcyMGQwOTllMzU2YTcuLjg3NTMyOTE2YzllMjdiNDNjM2FjZDBlNTc5YzVhYWEzNzMzNjE4Njgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAorKysg
Yi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJET01GaWxlUGF0aC5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIK
ICNpbmNsdWRlICJEaXJlY3RvcnlFbnRyeS5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeVJlYWRlci5o
IgogI2luY2x1ZGUgIkVudHJpZXNDYWxsYmFjay5oIgogI2luY2x1ZGUgIkVudHJ5QXJyYXkuaCIK
ICNpbmNsdWRlICJFbnRyeUNhbGxiYWNrLmgiCkBAIC0xMzcsMzggKzEzOCwzNCBAQCB2b2lkIEVu
dHJ5Q2FsbGJhY2tzOjpkaWRTdWNjZWVkKCkKIAogLy8gRW50cmllc0NhbGxiYWNrcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Q
YXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShQYXNz
UmVmUHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIERPTUZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0
IFN0cmluZyYgYmFzZVBhdGgpCitQYXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IEVudHJpZXND
YWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIERpcmVjdG9yeVJl
YWRlciogZGlyZWN0b3J5UmVhZGVyLCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgRW50cmllc0NhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIGZpbGVTeXN0ZW0sIGJhc2VQYXRoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5l
dyBFbnRyaWVzQ2FsbGJhY2tzKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgZGlyZWN0
b3J5UmVhZGVyLCBiYXNlUGF0aCkpOwogfQogCi1FbnRyaWVzQ2FsbGJhY2tzOjpFbnRyaWVzQ2Fs
bGJhY2tzKFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRE9NRmlsZVN5c3RlbSogZmlsZVN5
c3RlbSwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCkKK0VudHJpZXNDYWxsYmFja3M6OkVudHJpZXND
YWxsYmFja3MoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFz
c1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBEaXJlY3RvcnlSZWFkZXIqIGRp
cmVjdG9yeVJlYWRlciwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCkKICAgICA6IEZpbGVTeXN0ZW1D
YWxsYmFja3NCYXNlKGVycm9yQ2FsbGJhY2spCiAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNj
ZXNzQ2FsbGJhY2spCi0gICAgLCBtX2ZpbGVTeXN0ZW0oZmlsZVN5c3RlbSkKKyAgICAsIG1fZGly
ZWN0b3J5UmVhZGVyKGRpcmVjdG9yeVJlYWRlcikKICAgICAsIG1fYmFzZVBhdGgoYmFzZVBhdGgp
CiAgICAgLCBtX2VudHJpZXMoRW50cnlBcnJheTo6Y3JlYXRlKCkpCiB7CisgICAgQVNTRVJUKG1f
ZGlyZWN0b3J5UmVhZGVyKTsKIH0KIAogdm9pZCBFbnRyaWVzQ2FsbGJhY2tzOjpkaWRSZWFkRGly
ZWN0b3J5RW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGlzRGlyZWN0b3J5KQogewogICAg
IGlmIChpc0RpcmVjdG9yeSkKLSAgICAgICAgbV9lbnRyaWVzLT5hcHBlbmQoRGlyZWN0b3J5RW50
cnk6OmNyZWF0ZShtX2ZpbGVTeXN0ZW0sIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNlUGF0aCwg
bmFtZSkpKTsKKyAgICAgICAgbV9lbnRyaWVzLT5hcHBlbmQoRGlyZWN0b3J5RW50cnk6OmNyZWF0
ZShtX2RpcmVjdG9yeVJlYWRlci0+ZmlsZXN5c3RlbSgpLCBET01GaWxlUGF0aDo6YXBwZW5kKG1f
YmFzZVBhdGgsIG5hbWUpKSk7CiAgICAgZWxzZQotICAgICAgICBtX2VudHJpZXMtPmFwcGVuZChG
aWxlRW50cnk6OmNyZWF0ZShtX2ZpbGVTeXN0ZW0sIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNl
UGF0aCwgbmFtZSkpKTsKKyAgICAgICAgbV9lbnRyaWVzLT5hcHBlbmQoRmlsZUVudHJ5OjpjcmVh
dGUobV9kaXJlY3RvcnlSZWFkZXItPmZpbGVzeXN0ZW0oKSwgRE9NRmlsZVBhdGg6OmFwcGVuZCht
X2Jhc2VQYXRoLCBuYW1lKSkpOwogfQogCiB2b2lkIEVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWRE
aXJlY3RvcnlFbnRyaWVzKGJvb2wgaGFzTW9yZSkKIHsKICAgICBpZiAobV9zdWNjZXNzQ2FsbGJh
Y2spIHsKKyAgICAgICAgbV9kaXJlY3RvcnlSZWFkZXItPnNldEhhc01vcmUoaGFzTW9yZSk7CiAg
ICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudChtX2VudHJpZXMuZ2V0KCkpOwot
ICAgICAgICBpZiAoIW1fZW50cmllcy0+aXNFbXB0eSgpICYmICFoYXNNb3JlKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB3ZSBoYXZlIHJldHVybmVkIHNvbWUgZW50cmllcyBhbmQgdGhlcmUncmUgbm8g
bW9yZSBjb21pbmcgZW50cmllcyAoaGFzTW9yZT09ZmFsc2UpLCBjYWxsIGJhY2sgb25jZSBtb3Jl
IHdpdGggYW4gZW1wdHkgYXJyYXkuCi0gICAgICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFu
ZGxlRXZlbnQoRW50cnlBcnJheTo6Y3JlYXRlKCkuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdWNj
ZXNzQ2FsbGJhY2suY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICBtX2VudHJpZXMtPmNsZWFy
KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNh
bGxiYWNrcy5oIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAppbmRleCAz
NjQ3YWQzMTliNjc4NjQ2NjJlOWQ4ZGY2M2I5ZWI0OTc0YWVhMTU0Li43ZjE4NmVmMjc1NGFlNTYy
NjUyYzFmNGZkY2YxNjA2YzMyMzVkNGI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5oCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmgKQEAgLTQyLDYgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBc3lu
Y0ZpbGVXcml0ZXI7CiBjbGFzcyBET01GaWxlU3lzdGVtOworY2xhc3MgRGlyZWN0b3J5UmVhZGVy
OwogY2xhc3MgRXJyb3JDYWxsYmFjazsKIGNsYXNzIEVudHJpZXNDYWxsYmFjazsKIGNsYXNzIEVu
dHJ5QXJyYXk7CkBAIC05OCwxNCArOTksMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgRW50cmllc0Nh
bGxiYWNrcyA6IHB1YmxpYyBGaWxlU3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8RW50cmllc0NhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RW50
cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwgRE9NRmlsZVN5c3RlbSos
IGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEVudHJpZXND
YWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFjaz4sIFBhc3NSZWZQdHI8
RXJyb3JDYWxsYmFjaz4sIERpcmVjdG9yeVJlYWRlciosIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgp
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWFkRGlyZWN0b3J5RW50cnkoY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIGlzRGlyZWN0b3J5KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVjdG9y
eUVudHJpZXMoYm9vbCBoYXNNb3JlKTsKIAogcHJpdmF0ZToKLSAgICBFbnRyaWVzQ2FsbGJhY2tz
KFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwg
RE9NRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpOworICAgIEVudHJpZXNDYWxs
YmFja3MoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJh
Y2s+LCBEaXJlY3RvcnlSZWFkZXIqLCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKTsKICAgICBSZWZQ
dHI8RW50cmllc0NhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKLSAgICBET01GaWxlU3lzdGVt
KiBtX2ZpbGVTeXN0ZW07CisgICAgRGlyZWN0b3J5UmVhZGVyKiBtX2RpcmVjdG9yeVJlYWRlcjsK
ICAgICBTdHJpbmcgbV9iYXNlUGF0aDsKICAgICBSZWZQdHI8RW50cnlBcnJheT4gbV9lbnRyaWVz
OwogfTsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDYwMTMyOWEzZDg0MzMyMTlhMzc2YTA1MjcwMjk1NGM1N2I5
N2E2YmYuLmMwMWY4MTJmZTEzOTE4ZGI4ZDI2NTZiNmE0OWFjZTVjNWExZGMyZTMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMiw2ICsyLDE2IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCiAKKyAgICAgICAgRml4IERpcmVjdG9yeVJlYWRlcidzIGJlaGF2aW9yIHRvIHRyaWdnZXIg
b25seSBvbmUgRW50cmllc0NhbGxiYWNrIHBlciByZWFkRW50cmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY1NjMKKworICAgICAgICAqIHNyYy9X
ZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5KToKKworMjAxMC0wOS0yNSAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKICAgICAgICAgW0NsZWFudXBdIEFkZCBjcmVhdGUgbWV0aG9kIHRv
IEZpbGVTeXN0ZW1DYWxsYmFja3MgdG8gZ2V0IHJpZCBvZiBuYWtlZCBuZXcncwogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY1NjEKIApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAppbmRleCBh
MjNhZGQ3YmZlMTA2MzExOTU1ZmFhMWQ4N2M1ZmI4NTVlMWQ0M2MyLi5mMjY0OTE0NGM0NGFmZGI5
ZDIwZjM4OTljMzQyOGJhODBlNjFlYzRhIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcApAQCAtNzAsMTEgKzcwLDEzIEBAIHZvaWQg
V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWRNZXRhZGF0YShjb25zdCBXZWJGaWxl
SW5mbyYgaW5mbykKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWREaXJl
Y3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1FbnRyeT4mIGVudHJpZXMsIGJvb2wg
aGFzTW9yZSkKIHsKICAgICBBU1NFUlQobV9jYWxsYmFja3MpOworICAgIC8vIEZJWE1FOiBDdXJy
ZW50IGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIHN1cHBvcnQgY2h1bmsgcmVhZGluZy4KKyAgICAv
LyBSZW1vdmUgdGhpcyBBU1NFUlQgd2hlbiB3ZSBzdXBwb3J0IGNodW5rIHJlYWRpbmcuCisgICAg
QVNTRVJUKCFoYXNNb3JlKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudHJpZXMuc2l6
ZSgpOyArK2kpCiAgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRSZWFkRGlyZWN0b3J5RW50cnkoZW50
cmllc1tpXS5uYW1lLCBlbnRyaWVzW2ldLmlzRGlyZWN0b3J5KTsKICAgICBtX2NhbGxiYWNrcy0+
ZGlkUmVhZERpcmVjdG9yeUVudHJpZXMoaGFzTW9yZSk7Ci0gICAgaWYgKCFoYXNNb3JlKQotICAg
ICAgICBkZWxldGUgdGhpczsKKyAgICBkZWxldGUgdGhpczsKIH0KIAogdm9pZCBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbDo6ZGlkT3BlbkZpbGVTeXN0ZW0oY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBjb25zdCBXZWJTdHJpbmcmIHBhdGgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69018</attachid>
            <date>2010-09-27 21:42:26 -0700</date>
            <delta_ts>2010-09-27 21:52:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46563-20100927214225.patch</filename>
            <type>text/plain</type>
            <size>24737</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzN2NhNzMxNDFlMTU5MWFlZTkyZWY0MDdmODMzYWM2MmNmMWM5ZTIwLi4wMjc4ZDUx
ZDI0MzdlOTU3MjY2YjRlMzY5N2E3M2EyNTZjNGJkZjlhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDktMjcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBEaXJlY3RvcnlS
ZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFjayBwZXIg
cmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2NTYzCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmxhZ3MtcGFzc2luZy5odG1s
OiBVcGRhdGVkIGZvciB0byBtYWtlIGl0IG1hdGNoCisgICAgICAgIHdpdGggdXBkYXRlZCBURU1Q
TEFURS5odG1sLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZWFkLWRpcmVjdG9yeS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXRlc3QtdXRp
bC5qczogQWRkZWQgZm9yIGNvbW1vbiB0ZXN0CisgICAgICAgIHV0aWxpdGllcy4KKyAgICAgICAg
KiBmYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWw6IFVwZGF0ZWQgdG8g
aW5jbHVkZQorICAgICAgICBmcy10ZXN0LXV0aWwuanMuCisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3NjcmlwdC10ZXN0cy9yZWFkLWRpcmVjdG9yeS5qczogQWRkZWQuCisKIDIwMTAtMDktMjcg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBhZGRlZCBhbiBleHBlY3RhdGlvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9mbGFncy1wYXNzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
ZmxhZ3MtcGFzc2luZy5odG1sCmluZGV4IDcwYWRkNjYyNTI1ZjYxNDJjMmQ2MGY5MDBlMjQ3YmZl
NmI2Y2IxZmIuLmYzNDc0NDY2ZmVjMjQ5YjkxN2M4NTZiZDgzOTRmZTMxZjJlZGJiZGMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9mbGFncy1wYXNzaW5nLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZsYWdzLXBhc3NpbmcuaHRtbApAQCAtMiw2
ICsyLDcgQEAKIDxoZWFkPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgogPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3Qt
dXRpbC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keT4KIDxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0
b3J5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZWFkLWRpcmVj
dG9yeS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY2NGY3NDNiZGVkYzk3Y2IxZmUyNDI4Yjdj
MDBlNmE3YTE5ZDcxNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9yZWFkLWRpcmVjdG9yeS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorRGlyZWN0
b3J5UmVhZGVyLnJlYWRFbnRyaWVzKCkgdGVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1N1Y2Nlc3NmdWxseSBvYnRhaW5lZCBQZXJzaXN0ZW50IEZpbGVTeXN0ZW06VGVzdFNo
ZWxsRmlsZVN5c3RlbQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCitQQVNTIHJlYWRFbnRyaWVzQ291bnQgaXMgZW50cmllc0NhbGxiYWNrQ291bnQKK1BB
U1MgcmVzdWx0RW50cmllcy5sZW5ndGggaXMgdGVzdEVudHJpZXNDb3VudAorRW50cnk6L2QgaXNE
aXJldG9yeTpmYWxzZQorUEFTUyB0ZXN0RW50cmllc1tlbnRyeS5mdWxsUGF0aF0gaXMgZW50cnku
aXNEaXJlY3RvcnkKK0VudHJ5Oi9mIGlzRGlyZXRvcnk6dHJ1ZQorUEFTUyB0ZXN0RW50cmllc1tl
bnRyeS5mdWxsUGF0aF0gaXMgZW50cnkuaXNEaXJlY3RvcnkKK0VudHJ5Oi9lIGlzRGlyZXRvcnk6
ZmFsc2UKK1BBU1MgdGVzdEVudHJpZXNbZW50cnkuZnVsbFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0
b3J5CitFbnRyeTovYSBpc0RpcmV0b3J5OnRydWUKK1BBU1MgdGVzdEVudHJpZXNbZW50cnkuZnVs
bFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0b3J5CitFbnRyeTovYyBpc0RpcmV0b3J5OnRydWUKK1BB
U1MgdGVzdEVudHJpZXNbZW50cnkuZnVsbFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0b3J5CitFbnRy
eTovYiBpc0RpcmV0b3J5OmZhbHNlCitQQVNTIHRlc3RFbnRyaWVzW2VudHJ5LmZ1bGxQYXRoXSBp
cyBlbnRyeS5pc0RpcmVjdG9yeQorRG9uZS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0b3J5Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVhZC1kaXJlY3RvcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODNhOTY2NjQzNDRiMzJkNzhk
NjIwNzQ4N2E5YWMxZmVjYzI3OWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0b3J5Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mcy10ZXN0LXV0aWwuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWFkLWRp
cmVjdG9yeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA0Mzg3MGEwZDRlYzJhMWM1MTRiODFmMDc0MmYwNjVjOTc5ZmMxMTIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXRlc3QtdXRp
bC5qcwpAQCAtMCwwICsxLDEwNiBAQAordmFyIEpvaW5IZWxwZXIgPSBmdW5jdGlvbihjYWxsYmFj
aykKK3sKKyAgICB0aGlzLnBlbmRpbmdPcGVyYXRpb25zID0gMDsKKyAgICB0aGlzLmNhbGxiYWNr
ID0gY2FsbGJhY2s7CisKKyAgICB0aGlzLnJ1biA9IGZ1bmN0aW9uKG9wZXJhdGlvbikgeworICAg
ICAgICB0aGlzLnBlbmRpbmdPcGVyYXRpb25zKys7CisgICAgICAgIG9wZXJhdGlvbigpOworICAg
IH07CisKKyAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5wZW5kaW5n
T3BlcmF0aW9ucy0tOworICAgICAgICBpZiAodGhpcy5wZW5kaW5nT3BlcmF0aW9ucyA9PSAwKQor
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9OworfTsKKworZnVuY3Rpb24gcmVtb3ZlUmVj
dXJzaXZlbHkoZGlyZWN0b3J5LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHsKKyAg
ICB2YXIgUmVtb3ZlUmVjdXJzaXZlSGVscGVyID0gZnVuY3Rpb24oc3VjY2Vzc0NhbGxiYWNrLCBl
cnJvckNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMucmVtb3ZlRGlyTWFwID0ge307CisgICAgICAg
IHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gc3VjY2Vzc0NhbGxiYWNrOworICAgICAgICB0aGlzLmVy
cm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOworCisgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJz
aXZlbHkgPSBmdW5jdGlvbihkaXJlY3RvcnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMu
cmVtb3ZlUmVjdXJzaXZlbHlJbnRlcm5hbChkaXJlY3RvcnkpOworICAgICAgICB9OworCisgICAg
ICAgIHRoaXMuaGFzTW9yZUVudHJpZXMgPSBmdW5jdGlvbihoYXNoKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGsgaW4gaGFzaCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmJpbmQg
PSBmdW5jdGlvbihjYWxsYmFjaywgYXJnMSwgYXJnMiwgYXJnMykKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIG9iaiA9IHRoaXM7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7
CisgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLmFwcGx5KG9iaiwgW2FyZzEsIGFyZzIsIGFyZzNdKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG9iaiwgW2FyZywg
YXJnMSwgYXJnMiwgYXJnM10pOworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAg
ICB0aGlzLnJlbW92ZURpcmVjdG9yeSA9IGZ1bmN0aW9uKGRpcmVjdG9yeSwgcGFyZW50RGlyZWN0
b3J5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGlyZWN0b3J5LmZ1bGxQYXRoICE9ICcv
JykgeworICAgICAgICAgICAgICAgIC8vIE9rIHRvIHJlbW92ZSB0aGUgcGFyZW50IGRpcmVjdG9y
eS4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkucmVtb3ZlKHRoaXMuYmluZCh0aGlzLmVudHJ5
UmVtb3ZlZENhbGxiYWNrLCBwYXJlbnREaXJlY3RvcnksIGRpcmVjdG9yeSksIHRoaXMuYmluZCh0
aGlzLkVycm9yQ2FsbGJhY2spKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLnJlbW92ZURpck1hcFtkaXJlY3RvcnkuZnVsbFBhdGhdOworICAgICAgICAg
ICAgaWYgKCF0aGlzLmhhc01vcmVFbnRyaWVzKHRoaXMucmVtb3ZlRGlyTWFwKSAmJiB0aGlzLnN1
Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NDYWxsYmFjaygpOwor
ICAgICAgICB9OworCisgICAgICAgIHRoaXMuZW50cnlSZW1vdmVkQ2FsbGJhY2sgPSBmdW5jdGlv
bihkaXJlY3RvcnksIGVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNE
aXJlY3RvcnkpCisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVtb3ZlRGlyTWFwW2VudHJ5
LmZ1bGxQYXRoXTsKKworICAgICAgICAgICAgaWYgKGRpcmVjdG9yeSkgeworICAgICAgICAgICAg
ICAgIHZhciBkaXJJbmZvID0gdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXTsK
KyAgICAgICAgICAgICAgICBpZiAoLS1kaXJJbmZvLmVudHJpZXMgPT0gMCAmJiBkaXJJbmZvLmhh
c01vcmUgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRGlyZWN0b3J5
KGRpcmVjdG9yeSwgZGlySW5mby5wYXJlbnREaXJlY3RvcnkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJzaXZlbHlDYWxsYmFjayA9IGZ1bmN0
aW9uKGVudHJpZXMsIGRpcmVjdG9yeSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5y
ZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXS5lbnRyaWVzKys7CisgICAgICAgICAgICAg
ICAgaWYgKGVudHJpZXNbaV0uaXNEaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVtb3ZlUmVjdXJzaXZlbHlJbnRlcm5hbChlbnRyaWVzW2ldLCBkaXJlY3RvcnkpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVz
W2ldOworICAgICAgICAgICAgICAgICAgICBlbnRyeS5yZW1vdmUodGhpcy5iaW5kKHRoaXMuZW50
cnlSZW1vdmVkQ2FsbGJhY2ssIGRpcmVjdG9yeSwgZW50cnkpLCB0aGlzLmJpbmQodGhpcy5lcnJv
ckNhbGxiYWNrKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGVudHJpZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEaXJN
YXBbZGlyZWN0b3J5LmZ1bGxQYXRoXS5yZWFkZXIucmVhZEVudHJpZXModGhpcy5iaW5kKHRoaXMu
cmVtb3ZlUmVjdXJzaXZlbHlDYWxsYmFjaywgZGlyZWN0b3J5KSwgdGhpcy5iaW5kKHRoaXMuZXJy
b3JDYWxsYmFjaykpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIg
ZGlySW5mbyA9IHRoaXMucmVtb3ZlRGlyTWFwW2RpcmVjdG9yeS5mdWxsUGF0aF07CisgICAgICAg
ICAgICAgICAgZGlySW5mby5oYXNNb3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGRp
ckluZm8uZW50cmllcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURpcmVj
dG9yeShkaXJlY3RvcnksIGRpckluZm8ucGFyZW50RGlyZWN0b3J5KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZVJlY3Vyc2l2ZWx5SW50ZXJuYWwgPSBm
dW5jdGlvbihkaXJlY3RvcnksIHBhcmVudERpcmVjdG9yeSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZGlyZWN0b3J5UmVhZGVyID0gZGlyZWN0b3J5LmNyZWF0ZVJlYWRlcigpOworICAgICAgICAg
ICAgdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXSA9IHsKKyAgICAgICAgICAg
ICAgICBoYXNNb3JlOiB0cnVlLAorICAgICAgICAgICAgICAgIHBhcmVudERpcmVjdG9yeTogcGFy
ZW50RGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGVudHJpZXM6IDAsCisgICAgICAgICAgICAg
ICAgcmVhZGVyOiBkaXJlY3RvcnlSZWFkZXIsCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
ZGlyZWN0b3J5UmVhZGVyLnJlYWRFbnRyaWVzKHRoaXMuYmluZCh0aGlzLnJlbW92ZVJlY3Vyc2l2
ZWx5Q2FsbGJhY2ssIGRpcmVjdG9yeSksIHRoaXMuYmluZCh0aGlzLmVycm9yQ2FsbGJhY2spKTsK
KyAgICAgICAgfTsKKyAgICB9OworCisgICAgdmFyIGhlbHBlciA9IG5ldyBSZW1vdmVSZWN1cnNp
dmVIZWxwZXIoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBoZWxwZXIucmVt
b3ZlUmVjdXJzaXZlbHkoZGlyZWN0b3J5KTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbAppbmRleCA4YTFhMTVlNWMz
ODc0MTE1MDJkYzYyMDkyNjNlMDFhN2JiNGE0OTc3Li5mMjA3ZjFmMWZjNDZhM2E0YmUwZjZhMmZi
ZWUyMTYyNDY4MTgyZDQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
c2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCkBAIC0yLDYgKzIsNyBAQAogPGhlYWQ+CiA8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+CiA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3NjcmlwdD4K
IDwvaGVhZD4KIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3JlYWQtZGlyZWN0b3J5Lmpz
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZWFkLWRpcmVjdG9y
eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYWFjZDM4NWYzNjI4MDA2YzJhNDUxMWZiZGI4NTIxNWNiNjMwMzQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10
ZXN0cy9yZWFkLWRpcmVjdG9yeS5qcwpAQCAtMCwwICsxLDEwMCBAQAorZGVzY3JpcHRpb24oIkRp
cmVjdG9yeVJlYWRlci5yZWFkRW50cmllcygpIHRlc3QuIik7Cit2YXIgZmlsZVN5c3RlbSA9IG51
bGw7Cit2YXIgcmVhZGVyID0gbnVsbDsKK3ZhciByZXN1bHRFbnRyaWVzID0gW107CisKK3ZhciBy
ZWFkRW50cmllc0NvdW50ID0gMDsKK3ZhciBlbnRyaWVzQ2FsbGJhY2tDb3VudCA9IDA7CisKKy8v
IHBhdGg6IGlzRGlyZWN0b3J5IG1hcC4KK3ZhciB0ZXN0RW50cmllcyA9IHsKKyAgICAnL2EnOiB0
cnVlLAorICAgICcvYic6IGZhbHNlLAorICAgICcvYyc6IHRydWUsCisgICAgJy9kJzogZmFsc2Us
CisgICAgJy9lJzogZmFsc2UsCisgICAgJy9mJzogdHJ1ZSwKK307Cit2YXIgdGVzdEVudHJpZXND
b3VudCA9IDA7CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGRlYnVnKCJEb25lLiIpOwor
ICAgIHJlbW92ZVJlY3Vyc2l2ZWx5KGZpbGVTeXN0ZW0ucm9vdCk7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBlcnJvckNhbGxiYWNrKGVycm9yKQoreworICAgIGRlYnVn
KCJFcnJvciBvY2N1cmVkOiIgKyBlcnJvci5jb2RlKTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK3Zh
ciBlbnRyeSA9IG51bGw7CitmdW5jdGlvbiB2ZXJpZnlUZXN0UmVzdWx0KCkKK3sKKyAgICBzaG91
bGRCZSgncmVhZEVudHJpZXNDb3VudCcsICdlbnRyaWVzQ2FsbGJhY2tDb3VudCcpOworICAgIHNo
b3VsZEJlKCdyZXN1bHRFbnRyaWVzLmxlbmd0aCcsICd0ZXN0RW50cmllc0NvdW50Jyk7CisgICAg
Zm9yIChpID0gMDsgaSA8IHJlc3VsdEVudHJpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZW50
cnkgPSByZXN1bHRFbnRyaWVzW2ldOworICAgICAgICBkZWJ1ZygnRW50cnk6JyArIGVudHJ5LmZ1
bGxQYXRoICsgJyBpc0RpcmV0b3J5OicgKyBlbnRyeS5pc0RpcmVjdG9yeSk7CisgICAgICAgIHNo
b3VsZEJlKCd0ZXN0RW50cmllc1tlbnRyeS5mdWxsUGF0aF0nLCAnZW50cnkuaXNEaXJlY3Rvcnkn
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGVudHJpZXNDYWxsYmFjayhlbnRyaWVzKQoreworICAg
IGVudHJpZXNDYWxsYmFja0NvdW50Kys7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJp
ZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdEVudHJpZXMucHVzaChlbnRyaWVzW2ldKTsK
KworICAgIGlmIChlbnRyaWVzLmxlbmd0aCkgeworICAgICAgICByZWFkRW50cmllc0NvdW50Kys7
CisgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhlbnRyaWVzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE11c3QgaGF2ZSByZWFkIGFsbCB0aGUgZW50
cmllcy4KKyAgICAgICAgdmVyaWZ5VGVzdFJlc3VsdCgpOworICAgICAgICBlbmRUZXN0KCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBydW5SZWFkRGlyZWN0b3J5VGVzdCgpCit7CisgICAgcmVhZEVu
dHJpZXNDb3VudCsrOworICAgIHJlYWRlciA9IGZpbGVTeXN0ZW0ucm9vdC5jcmVhdGVSZWFkZXIo
KTsKKyAgICByZWFkZXIucmVhZEVudHJpZXMoZW50cmllc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNr
KTsKK30KKworZnVuY3Rpb24gcHJlcGFyZUZvclRlc3QoKQoreworICAgIHZhciBqb2luID0gbmV3
IEpvaW5IZWxwZXIocnVuUmVhZERpcmVjdG9yeVRlc3QpOworICAgIHZhciBkb25lID0gZnVuY3Rp
b24oKSB7IGpvaW4uZG9uZSgpOyB9OworCisgICAgZm9yICh2YXIgcGF0aCBpbiB0ZXN0RW50cmll
cykgeworICAgICAgICB0ZXN0RW50cmllc0NvdW50Kys7CisgICAgICAgIGlmICh0ZXN0RW50cmll
c1twYXRoXSkKKyAgICAgICAgICAgIGpvaW4ucnVuKGZ1bmN0aW9uKCkgeyBmaWxlU3lzdGVtLnJv
b3QuZ2V0RGlyZWN0b3J5KHBhdGgsIHtjcmVhdGU6dHJ1ZX0sIGRvbmUsIGVycm9yQ2FsbGJhY2sp
OyB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgam9pbi5ydW4oZnVuY3Rpb24oKSB7IGZp
bGVTeXN0ZW0ucm9vdC5nZXRGaWxlKHBhdGgsIHtjcmVhdGU6dHJ1ZX0sIGRvbmUsIGVycm9yQ2Fs
bGJhY2spOyB9KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjayhmcykKK3sK
KyAgICBmaWxlU3lzdGVtID0gZnM7CisgICAgZGVidWcoIlN1Y2Nlc3NmdWxseSBvYnRhaW5lZCBQ
ZXJzaXN0ZW50IEZpbGVTeXN0ZW06IiArIGZpbGVTeXN0ZW0ubmFtZSk7CisKKyAgICByZW1vdmVS
ZWN1cnNpdmVseShmaWxlU3lzdGVtLnJvb3QsIHByZXBhcmVGb3JUZXN0LCBlcnJvckNhbGxiYWNr
KTsKK30KKworaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKworICAgIHJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksIDEw
MCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK30gZWxzZQorICAgIGRlYnVnKCJU
aGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5c3RlbSBBUEkgc3VwcG9ydC4iKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU0NTE0N2ZhODZlYjMwYjAxNjU5MTc3YTM5MzU1MmRiYzZh
ZjFkYWMuLjI1ZGRhY2VhMzQ3MjAxYzk2NDI0ZWUwOTI2NjRlMWU4MWM3MTA0NWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTAtMDktMjcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBEaXJl
Y3RvcnlSZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFj
ayBwZXIgcmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ2NTYzCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlc3lzdGVtL3JlYWQtZGly
ZWN0b3J5Lmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0b3J5KTogQ2hhbmdlZCB0byB0
YWtlIERpcmVjdG9yeVJlYWRlcgorICAgICAgICBhcyBhIHBhcmFtZXRlci4KKyAgICAgICAgKiBm
aWxlYXBpL0RPTUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06
OnNjaGVkdWxlQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0RpcmVjdG9yeVJl
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlSZWFkZXI6OkRpcmVjdG9yeVJl
YWRlcik6IEFkZGVkIGluaXRpYWxpemVyIGZvcgorICAgICAgICBtX2hhc01vcmUgZmxhZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHJpZXMpOiBDaGFuZ2VkIHRv
IHNjaGVkdWxlCisgICAgICAgIEVudHJpZXNDYWxsYmFjayB3aXRoIGFuIGVtcHR5IGFycmF5IGlm
IG1faGFzTW9yZSBmbGFnIGlzIHNldCBmYWxzZS4KKyAgICAgICAgKiBmaWxlYXBpL0RpcmVjdG9y
eVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0b3J5UmVhZGVyOjpmaWxlc3lzdGVt
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlSZWFkZXI6OnNldEhhc01vcmUp
OiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVudHJpZXNDYWxsYmFja3M6OkVudHJpZXNDYWxsYmFja3MpOiBDaGFuZ2VkIHRvIHRha2UK
KyAgICAgICAgRGlyZWN0b3J5UmVhZGVyIGFzIGEgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6RW50cmllc0NhbGxiYWNrczo6ZGlkUmVhZERpcmVjdG9yeUVudHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWREaXJlY3RvcnlFbnRyaWVzKTogQ2hhbmdl
ZCAxKSBub3QgdG8KKyAgICAgICAgdHJpZ2dlciB0aGUgc2Vjb25kIGNhbGxiYWNrIHdoZW4gaGFz
TW9yZSBpcyBmYWxzZSwgYW5kIDIpIHRvIHVwZGF0ZQorICAgICAgICB0aGUgRGlyZWN0b3J5UmVh
ZGVyJ3MgbV9oYXNNb3JlIGZsYWcuCisgICAgICAgICogZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmg6CisKIDIwMTAtMDktMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcAppbmRleCAyYmQwOWMyZjBkZWNmN2I1MGZmYmQ4NDNiNjA0ZWExMWI0OTVkNGRhLi5i
MWIxY2RjMTFlNmRlNTNhMWU4NWJlYmUzYzU2YjNmZWU4ZDQ0MGRkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKKysrIGIvV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uY3BwCkBAIC0yMTQsMTEgKzIxNCwxMSBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNy
ZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGUsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNh
bAogICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVXcml0ZXIoZmlsZVdyaXRlci5nZXQoKSwg
cGxhdGZvcm1QYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBET01GaWxlU3lz
dGVtOjpyZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVz
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrKQordm9pZCBET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0b3J5KERpcmVjdG9yeVJl
YWRlciogcmVhZGVyLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8RW50cmllc0NhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaykKIHsKICAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpOwogICAg
IFN0cmluZyBwbGF0Zm9ybVBhdGggPSBtX2FzeW5jRmlsZVN5c3RlbS0+dmlydHVhbFRvUGxhdGZv
cm1QYXRoKHBhdGgpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBsYXRm
b3JtUGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgdGhpcywgcGF0aCkpOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkRGlyZWN0
b3J5KHBsYXRmb3JtUGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgcmVhZGVyLCBwYXRoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oIGIvV2ViQ29yZS9maWxl
YXBpL0RPTUZpbGVTeXN0ZW0uaAppbmRleCA4ODFmZmM1OTM5MjQ5MDZkYmNhNWM4Y2Q5MzJmNjJj
ZDViOGFhMDFkLi44NDk4ZTc1YjVmNDQ2ZTNlZmU5Yjc4ZDY4MjdlZDMyZmFjZDRlZjcyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oCisrKyBiL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRGlyZWN0b3J5RW50cnk7CitjbGFzcyBEaXJlY3RvcnlSZWFkZXI7CiBjbGFz
cyBFbnRyeTsKIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CiBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CkBA
IC03OCwxMyArNzksMjAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0UGFyZW50KGNvbnN0IEVudHJ5
KiBlbnRyeSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPik7CiAgICAgdm9pZCBnZXRGaWxlKGNvbnN0IEVudHJ5KiBiYXNlLCBjb25zdCBTdHJpbmcm
IHBhdGgsIFBhc3NSZWZQdHI8RmxhZ3M+LCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2b2lkIGdldERpcmVjdG9yeShjb25zdCBFbnRy
eSogYmFzZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPEZsYWdzPiwgUGFzc1JlZlB0
cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgdm9pZCBy
ZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICB2b2lkIHJlYWREaXJlY3Rvcnko
RGlyZWN0b3J5UmVhZGVyKiByZWFkZXIsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxF
bnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2b2lkIGNy
ZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGUsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAKICAgICAvLyBTY2hlZHVsZSBh
IGNhbGxiYWNrLiBUaGlzIHNob3VsZCBub3QgY3Jvc3MgdGhyZWFkcyAoc2hvdWxkIGJlIGNhbGxl
ZCBvbiB0aGUgc2FtZSBjb250ZXh0IHRocmVhZCkuCisgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0
byBhIG1vcmUgZ2VuZXJpYyBwbGFjZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVu
YW1lIENCQXJnPgogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8Q0I+LCBQYXNzUmVmUHRyPENCQXJnPik7CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1lIENCQXJnPgorICAgIHZvaWQgc2NoZWR1bGVD
YWxsYmFjayhQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFyZz4gY2FsbGJh
Y2tBcmcpCisgICAgeworICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgY2FsbGJhY2ssIGNhbGxiYWNrQXJnKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Zp
bGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFk
ZXIuY3BwCmluZGV4IGIwZWVmMWNjNDkyNzZmMzNjNzk0MGU2NjkyY2EyZjVkNjAwZjA1MTUuLjA5
MmY5NzY0Mzg0MmJkMTZmNTM2ZTQ2MTc1M2UzYTc4Zjg1N2YxMzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9EaXJl
Y3RvcnlSZWFkZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJET01GaWxlU3lz
dGVtLmgiCiAjaW5jbHVkZSAiRW50cmllc0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiRW50cnlBcnJh
eS5oIgogI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDIsMTIgKzQzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERpcmVjdG9yeVJlYWRlcjo6
RGlyZWN0b3J5UmVhZGVyKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5c3RlbSwgY29u
c3QgU3RyaW5nJiBmdWxsUGF0aCkKICAgICA6IG1fZmlsZVN5c3RlbShmaWxlU3lzdGVtKQogICAg
ICwgbV9mdWxsUGF0aChmdWxsUGF0aCkKKyAgICAsIG1faGFzTW9yZSh0cnVlKQogewogfQogCiB2
b2lkIERpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHJpZXMoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJh
Y2s+IGVudHJpZXNDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQogewotICAgIG1fZmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShtX2Z1bGxQYXRoLCBlbnRy
aWVzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIGlmICghbV9oYXNNb3JlKSB7CisgICAg
ICAgIG1fZmlsZVN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhlbnRyaWVzQ2FsbGJhY2ssIEVudHJ5
QXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ZpbGVTeXN0
ZW0tPnJlYWREaXJlY3RvcnkodGhpcywgbV9mdWxsUGF0aCwgZW50cmllc0NhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmls
ZWFwaS9EaXJlY3RvcnlSZWFkZXIuaCBiL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFkZXIu
aAppbmRleCAwZTJlZjBmNmNkMjI5Y2RkNGQ5NTdlMWVmNWIyNzRhNThjNjM5MWQwLi5hODVlMWVl
OWIzYTQxNmJlMzk0MTUwYWNhZmVmMTE5ZTBiZmU1YmM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Zp
bGVhcGkvRGlyZWN0b3J5UmVhZGVyLmgKKysrIGIvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeVJl
YWRlci5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRW50
cmllc0NhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxsYmFjazsKK2NsYXNzIEVudHJpZXNDYWxsYmFj
a3M7CiAKIGNsYXNzIERpcmVjdG9yeVJlYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERpcmVjdG9y
eVJlYWRlcj4gewogcHVibGljOgpAQCAtNTAsMTMgKzUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RvcnlSZWFkZXIoZmlsZVN5c3RlbSwgcGF0aCkpOwog
ICAgIH0KIAotICAgIHZvaWQgcmVhZEVudHJpZXMoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
ID0gMCk7CisgICAgRE9NRmlsZVN5c3RlbSogZmlsZXN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZVN5c3RlbS5nZXQoKTsgfQorICAgIHZvaWQgcmVhZEVudHJpZXMoUGFzc1JlZlB0cjxFbnRy
aWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+ID0gMCk7CisgICAgdm9pZCBz
ZXRIYXNNb3JlKGJvb2wgaGFzTW9yZSkgeyBtX2hhc01vcmUgPSBoYXNNb3JlOyB9CiAKIHByaXZh
dGU6CiAgICAgRGlyZWN0b3J5UmVhZGVyKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5
c3RlbSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBt
X2ZpbGVTeXN0ZW07CiAgICAgU3RyaW5nIG1fZnVsbFBhdGg7CisgICAgYm9vbCBtX2hhc01vcmU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVT
eXN0ZW1DYWxsYmFja3MuY3BwIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3Mu
Y3BwCmluZGV4IDU1MGI1MDliNGI5NTNiOTQ2NDliMGJkYTM2NDcyMGQwOTllMzU2YTcuLjg3NTMy
OTE2YzllMjdiNDNjM2FjZDBlNTc5YzVhYWEzNzMzNjE4NjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJET01GaWxl
UGF0aC5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJEaXJlY3RvcnlF
bnRyeS5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeVJlYWRlci5oIgogI2luY2x1ZGUgIkVudHJpZXND
YWxsYmFjay5oIgogI2luY2x1ZGUgIkVudHJ5QXJyYXkuaCIKICNpbmNsdWRlICJFbnRyeUNhbGxi
YWNrLmgiCkBAIC0xMzcsMzggKzEzOCwzNCBAQCB2b2lkIEVudHJ5Q2FsbGJhY2tzOjpkaWRTdWNj
ZWVkKCkKIAogLy8gRW50cmllc0NhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNzT3duUHRyPEVudHJpZXNDYWxs
YmFja3M+IEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2ssIERPTUZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpCitQ
YXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShQYXNz
UmVmUHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIERpcmVjdG9yeVJlYWRlciogZGlyZWN0b3J5UmVhZGVy
LCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRW50
cmllc0NhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGZpbGVTeXN0ZW0s
IGJhc2VQYXRoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFbnRyaWVzQ2FsbGJhY2tzKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgZGlyZWN0b3J5UmVhZGVyLCBiYXNlUGF0aCkp
OwogfQogCi1FbnRyaWVzQ2FsbGJhY2tzOjpFbnRyaWVzQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RW50
cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgRE9NRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBi
YXNlUGF0aCkKK0VudHJpZXNDYWxsYmFja3M6OkVudHJpZXNDYWxsYmFja3MoUGFzc1JlZlB0cjxF
bnRyaWVzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBEaXJlY3RvcnlSZWFkZXIqIGRpcmVjdG9yeVJlYWRlciwgY29uc3Qg
U3RyaW5nJiBiYXNlUGF0aCkKICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2Fs
bGJhY2spCiAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0gICAgLCBt
X2ZpbGVTeXN0ZW0oZmlsZVN5c3RlbSkKKyAgICAsIG1fZGlyZWN0b3J5UmVhZGVyKGRpcmVjdG9y
eVJlYWRlcikKICAgICAsIG1fYmFzZVBhdGgoYmFzZVBhdGgpCiAgICAgLCBtX2VudHJpZXMoRW50
cnlBcnJheTo6Y3JlYXRlKCkpCiB7CisgICAgQVNTRVJUKG1fZGlyZWN0b3J5UmVhZGVyKTsKIH0K
IAogdm9pZCBFbnRyaWVzQ2FsbGJhY2tzOjpkaWRSZWFkRGlyZWN0b3J5RW50cnkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIGlzRGlyZWN0b3J5KQogewogICAgIGlmIChpc0RpcmVjdG9yeSkKLSAg
ICAgICAgbV9lbnRyaWVzLT5hcHBlbmQoRGlyZWN0b3J5RW50cnk6OmNyZWF0ZShtX2ZpbGVTeXN0
ZW0sIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNlUGF0aCwgbmFtZSkpKTsKKyAgICAgICAgbV9l
bnRyaWVzLT5hcHBlbmQoRGlyZWN0b3J5RW50cnk6OmNyZWF0ZShtX2RpcmVjdG9yeVJlYWRlci0+
ZmlsZXN5c3RlbSgpLCBET01GaWxlUGF0aDo6YXBwZW5kKG1fYmFzZVBhdGgsIG5hbWUpKSk7CiAg
ICAgZWxzZQotICAgICAgICBtX2VudHJpZXMtPmFwcGVuZChGaWxlRW50cnk6OmNyZWF0ZShtX2Zp
bGVTeXN0ZW0sIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNlUGF0aCwgbmFtZSkpKTsKKyAgICAg
ICAgbV9lbnRyaWVzLT5hcHBlbmQoRmlsZUVudHJ5OjpjcmVhdGUobV9kaXJlY3RvcnlSZWFkZXIt
PmZpbGVzeXN0ZW0oKSwgRE9NRmlsZVBhdGg6OmFwcGVuZChtX2Jhc2VQYXRoLCBuYW1lKSkpOwog
fQogCiB2b2lkIEVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWREaXJlY3RvcnlFbnRyaWVzKGJvb2wg
aGFzTW9yZSkKIHsKICAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgbV9kaXJl
Y3RvcnlSZWFkZXItPnNldEhhc01vcmUoaGFzTW9yZSk7CiAgICAgICAgIG1fc3VjY2Vzc0NhbGxi
YWNrLT5oYW5kbGVFdmVudChtX2VudHJpZXMuZ2V0KCkpOwotICAgICAgICBpZiAoIW1fZW50cmll
cy0+aXNFbXB0eSgpICYmICFoYXNNb3JlKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHJl
dHVybmVkIHNvbWUgZW50cmllcyBhbmQgdGhlcmUncmUgbm8gbW9yZSBjb21pbmcgZW50cmllcyAo
aGFzTW9yZT09ZmFsc2UpLCBjYWxsIGJhY2sgb25jZSBtb3JlIHdpdGggYW4gZW1wdHkgYXJyYXku
Ci0gICAgICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoRW50cnlBcnJheTo6
Y3JlYXRlKCkuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsK
LSAgICAgICAgfQotICAgICAgICBtX2VudHJpZXMtPmNsZWFyKCk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIGIvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAppbmRleCAzNjQ3YWQzMTliNjc4NjQ2NjJlOWQ4
ZGY2M2I5ZWI0OTc0YWVhMTU0Li43ZjE4NmVmMjc1NGFlNTYyNjUyYzFmNGZkY2YxNjA2YzMyMzVk
NGI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCisr
KyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKQEAgLTQyLDYgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBc3luY0ZpbGVXcml0ZXI7CiBjbGFzcyBE
T01GaWxlU3lzdGVtOworY2xhc3MgRGlyZWN0b3J5UmVhZGVyOwogY2xhc3MgRXJyb3JDYWxsYmFj
azsKIGNsYXNzIEVudHJpZXNDYWxsYmFjazsKIGNsYXNzIEVudHJ5QXJyYXk7CkBAIC05OCwxNCAr
OTksMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgRW50cmllc0NhbGxiYWNrcyA6IHB1YmxpYyBGaWxl
U3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RW50
cmllc0NhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPiwgRE9NRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgYmFzZVBh
dGgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IGNyZWF0ZShQYXNz
UmVmUHRyPEVudHJpZXNDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4sIERpcmVj
dG9yeVJlYWRlciosIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWFkRGlyZWN0b3J5RW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGlzRGlyZWN0b3J5
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVjdG9yeUVudHJpZXMoYm9vbCBoYXNNb3Jl
KTsKIAogcHJpdmF0ZToKLSAgICBFbnRyaWVzQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RW50cmllc0Nh
bGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwgRE9NRmlsZVN5c3RlbSosIGNvbnN0
IFN0cmluZyYgYmFzZVBhdGgpOworICAgIEVudHJpZXNDYWxsYmFja3MoUGFzc1JlZlB0cjxFbnRy
aWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+LCBEaXJlY3RvcnlSZWFkZXIq
LCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKTsKICAgICBSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBt
X3N1Y2Nlc3NDYWxsYmFjazsKLSAgICBET01GaWxlU3lzdGVtKiBtX2ZpbGVTeXN0ZW07CisgICAg
RGlyZWN0b3J5UmVhZGVyKiBtX2RpcmVjdG9yeVJlYWRlcjsKICAgICBTdHJpbmcgbV9iYXNlUGF0
aDsKICAgICBSZWZQdHI8RW50cnlBcnJheT4gbV9lbnRyaWVzOwogfTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDkyMTE1NTljZWEzOGZmOTlkNDk3NGE0MjAyODczNTdkMjkyYmI5NzkuLmNiM2NiMTNhNDlhMzM0
ZTkwYzQ2MDE2M2NjZWJkYzBiMWZiYzkwOGUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTA5LTI3ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggRGlyZWN0b3J5
UmVhZGVyJ3MgYmVoYXZpb3IgdG8gdHJpZ2dlciBvbmx5IG9uZSBFbnRyaWVzQ2FsbGJhY2sgcGVy
IHJlYWRFbnRyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NjU2MworCisgICAgICAgICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWRE
aXJlY3RvcnkpOgorCiAyMDEwLTA5LTI3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQnVpbGQgZml4LiBOb3QgcmV2aWV3ZWQuCkBAIC05MCw2ICsxMDAsMTYgQEAK
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgogCisgICAgICAgIEZpeCBEaXJlY3Rv
cnlSZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFjayBw
ZXIgcmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ2NTYzCisKKyAgICAgICAgKiBzcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVh
ZERpcmVjdG9yeSk6CisKKzIwMTAtMDktMjUgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAg
IFtDbGVhbnVwXSBBZGQgY3JlYXRlIG1ldGhvZCB0byBGaWxlU3lzdGVtQ2FsbGJhY2tzIHRvIGdl
dCByaWQgb2YgbmFrZWQgbmV3J3MKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ2NTYxCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAKaW5kZXggYTIzYWRkN2JmZTEwNjMxMTk1NWZhYTFkODdj
NWZiODU1ZTFkNDNjMi4uZjI2NDkxNDRjNDRhZmRiOWQyMGYzODk5YzM0MjhiYTgwZTYxZWM0YSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1w
bC5jcHAKQEAgLTcwLDExICs3MCwxMyBAQCB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBs
OjpkaWRSZWFkTWV0YWRhdGEoY29uc3QgV2ViRmlsZUluZm8mIGluZm8pCiB2b2lkIFdlYkZpbGVT
eXN0ZW1DYWxsYmFja3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5KGNvbnN0IFdlYlZlY3RvcjxXZWJG
aWxlU3lzdGVtRW50cnk+JiBlbnRyaWVzLCBib29sIGhhc01vcmUpCiB7CiAgICAgQVNTRVJUKG1f
Y2FsbGJhY2tzKTsKKyAgICAvLyBGSVhNRTogQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIE5P
VCBzdXBwb3J0IGNodW5rIHJlYWRpbmcuCisgICAgLy8gUmVtb3ZlIHRoaXMgQVNTRVJUIHdoZW4g
d2Ugc3VwcG9ydCBjaHVuayByZWFkaW5nLgorICAgIEFTU0VSVCghaGFzTW9yZSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBlbnRyaWVzLnNpemUoKTsgKytpKQogICAgICAgICBtX2NhbGxi
YWNrcy0+ZGlkUmVhZERpcmVjdG9yeUVudHJ5KGVudHJpZXNbaV0ubmFtZSwgZW50cmllc1tpXS5p
c0RpcmVjdG9yeSk7CiAgICAgbV9jYWxsYmFja3MtPmRpZFJlYWREaXJlY3RvcnlFbnRyaWVzKGhh
c01vcmUpOwotICAgIGlmICghaGFzTW9yZSkKLSAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgZGVs
ZXRlIHRoaXM7CiB9CiAKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZE9wZW5G
aWxlU3lzdGVtKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViU3RyaW5nJiBwYXRoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69019</attachid>
            <date>2010-09-27 21:52:18 -0700</date>
            <delta_ts>2010-09-29 10:43:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46563-20100927215217.patch</filename>
            <type>text/plain</type>
            <size>24183</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzN2NhNzMxNDFlMTU5MWFlZTkyZWY0MDdmODMzYWM2MmNmMWM5ZTIwLi4wMjc4ZDUx
ZDI0MzdlOTU3MjY2YjRlMzY5N2E3M2EyNTZjNGJkZjlhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDktMjcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBEaXJlY3RvcnlS
ZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFjayBwZXIg
cmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2NTYzCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmxhZ3MtcGFzc2luZy5odG1s
OiBVcGRhdGVkIGZvciB0byBtYWtlIGl0IG1hdGNoCisgICAgICAgIHdpdGggdXBkYXRlZCBURU1Q
TEFURS5odG1sLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9yZWFkLWRpcmVjdG9yeS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXRlc3QtdXRp
bC5qczogQWRkZWQgZm9yIGNvbW1vbiB0ZXN0CisgICAgICAgIHV0aWxpdGllcy4KKyAgICAgICAg
KiBmYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWw6IFVwZGF0ZWQgdG8g
aW5jbHVkZQorICAgICAgICBmcy10ZXN0LXV0aWwuanMuCisgICAgICAgICogZmFzdC9maWxlc3lz
dGVtL3NjcmlwdC10ZXN0cy9yZWFkLWRpcmVjdG9yeS5qczogQWRkZWQuCisKIDIwMTAtMDktMjcg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBhZGRlZCBhbiBleHBlY3RhdGlvbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9mbGFncy1wYXNzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
ZmxhZ3MtcGFzc2luZy5odG1sCmluZGV4IDcwYWRkNjYyNTI1ZjYxNDJjMmQ2MGY5MDBlMjQ3YmZl
NmI2Y2IxZmIuLmYzNDc0NDY2ZmVjMjQ5YjkxN2M4NTZiZDgzOTRmZTMxZjJlZGJiZGMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9mbGFncy1wYXNzaW5nLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZsYWdzLXBhc3NpbmcuaHRtbApAQCAtMiw2
ICsyLDcgQEAKIDxoZWFkPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgogPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3Qt
dXRpbC5qcyI+PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keT4KIDxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0
b3J5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZWFkLWRpcmVj
dG9yeS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTY2NGY3NDNiZGVkYzk3Y2IxZmUyNDI4Yjdj
MDBlNmE3YTE5ZDcxNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5
c3RlbS9yZWFkLWRpcmVjdG9yeS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNSBAQAorRGlyZWN0
b3J5UmVhZGVyLnJlYWRFbnRyaWVzKCkgdGVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1N1Y2Nlc3NmdWxseSBvYnRhaW5lZCBQZXJzaXN0ZW50IEZpbGVTeXN0ZW06VGVzdFNo
ZWxsRmlsZVN5c3RlbQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCitQQVNTIHJlYWRFbnRyaWVzQ291bnQgaXMgZW50cmllc0NhbGxiYWNrQ291bnQKK1BB
U1MgcmVzdWx0RW50cmllcy5sZW5ndGggaXMgdGVzdEVudHJpZXNDb3VudAorRW50cnk6L2QgaXNE
aXJldG9yeTpmYWxzZQorUEFTUyB0ZXN0RW50cmllc1tlbnRyeS5mdWxsUGF0aF0gaXMgZW50cnku
aXNEaXJlY3RvcnkKK0VudHJ5Oi9mIGlzRGlyZXRvcnk6dHJ1ZQorUEFTUyB0ZXN0RW50cmllc1tl
bnRyeS5mdWxsUGF0aF0gaXMgZW50cnkuaXNEaXJlY3RvcnkKK0VudHJ5Oi9lIGlzRGlyZXRvcnk6
ZmFsc2UKK1BBU1MgdGVzdEVudHJpZXNbZW50cnkuZnVsbFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0
b3J5CitFbnRyeTovYSBpc0RpcmV0b3J5OnRydWUKK1BBU1MgdGVzdEVudHJpZXNbZW50cnkuZnVs
bFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0b3J5CitFbnRyeTovYyBpc0RpcmV0b3J5OnRydWUKK1BB
U1MgdGVzdEVudHJpZXNbZW50cnkuZnVsbFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0b3J5CitFbnRy
eTovYiBpc0RpcmV0b3J5OmZhbHNlCitQQVNTIHRlc3RFbnRyaWVzW2VudHJ5LmZ1bGxQYXRoXSBp
cyBlbnRyeS5pc0RpcmVjdG9yeQorRG9uZS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0b3J5Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
eXN0ZW0vcmVhZC1kaXJlY3RvcnkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mODNhOTY2NjQzNDRiMzJkNzhk
NjIwNzQ4N2E5YWMxZmVjYzI3OWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0b3J5Lmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9mcy10ZXN0LXV0aWwuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9yZWFkLWRp
cmVjdG9yeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcyBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA0Mzg3MGEwZDRlYzJhMWM1MTRiODFmMDc0MmYwNjVjOTc5ZmMxMTIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVzb3VyY2VzL2ZzLXRlc3QtdXRp
bC5qcwpAQCAtMCwwICsxLDEwNiBAQAordmFyIEpvaW5IZWxwZXIgPSBmdW5jdGlvbihjYWxsYmFj
aykKK3sKKyAgICB0aGlzLnBlbmRpbmdPcGVyYXRpb25zID0gMDsKKyAgICB0aGlzLmNhbGxiYWNr
ID0gY2FsbGJhY2s7CisKKyAgICB0aGlzLnJ1biA9IGZ1bmN0aW9uKG9wZXJhdGlvbikgeworICAg
ICAgICB0aGlzLnBlbmRpbmdPcGVyYXRpb25zKys7CisgICAgICAgIG9wZXJhdGlvbigpOworICAg
IH07CisKKyAgICB0aGlzLmRvbmUgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5wZW5kaW5n
T3BlcmF0aW9ucy0tOworICAgICAgICBpZiAodGhpcy5wZW5kaW5nT3BlcmF0aW9ucyA9PSAwKQor
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICB9OworfTsKKworZnVuY3Rpb24gcmVtb3ZlUmVj
dXJzaXZlbHkoZGlyZWN0b3J5LCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHsKKyAg
ICB2YXIgUmVtb3ZlUmVjdXJzaXZlSGVscGVyID0gZnVuY3Rpb24oc3VjY2Vzc0NhbGxiYWNrLCBl
cnJvckNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMucmVtb3ZlRGlyTWFwID0ge307CisgICAgICAg
IHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gc3VjY2Vzc0NhbGxiYWNrOworICAgICAgICB0aGlzLmVy
cm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOworCisgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJz
aXZlbHkgPSBmdW5jdGlvbihkaXJlY3RvcnkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMu
cmVtb3ZlUmVjdXJzaXZlbHlJbnRlcm5hbChkaXJlY3RvcnkpOworICAgICAgICB9OworCisgICAg
ICAgIHRoaXMuaGFzTW9yZUVudHJpZXMgPSBmdW5jdGlvbihoYXNoKQorICAgICAgICB7CisgICAg
ICAgICAgICBmb3IgKGsgaW4gaGFzaCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLmJpbmQg
PSBmdW5jdGlvbihjYWxsYmFjaywgYXJnMSwgYXJnMiwgYXJnMykKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIG9iaiA9IHRoaXM7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7
CisgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLmFwcGx5KG9iaiwgW2FyZzEsIGFyZzIsIGFyZzNdKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG9iaiwgW2FyZywg
YXJnMSwgYXJnMiwgYXJnM10pOworICAgICAgICAgICAgfTsKKyAgICAgICAgfTsKKworICAgICAg
ICB0aGlzLnJlbW92ZURpcmVjdG9yeSA9IGZ1bmN0aW9uKGRpcmVjdG9yeSwgcGFyZW50RGlyZWN0
b3J5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGlyZWN0b3J5LmZ1bGxQYXRoICE9ICcv
JykgeworICAgICAgICAgICAgICAgIC8vIE9rIHRvIHJlbW92ZSB0aGUgcGFyZW50IGRpcmVjdG9y
eS4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkucmVtb3ZlKHRoaXMuYmluZCh0aGlzLmVudHJ5
UmVtb3ZlZENhbGxiYWNrLCBwYXJlbnREaXJlY3RvcnksIGRpcmVjdG9yeSksIHRoaXMuYmluZCh0
aGlzLkVycm9yQ2FsbGJhY2spKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGRlbGV0ZSB0aGlzLnJlbW92ZURpck1hcFtkaXJlY3RvcnkuZnVsbFBhdGhdOworICAgICAgICAg
ICAgaWYgKCF0aGlzLmhhc01vcmVFbnRyaWVzKHRoaXMucmVtb3ZlRGlyTWFwKSAmJiB0aGlzLnN1
Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3NDYWxsYmFjaygpOwor
ICAgICAgICB9OworCisgICAgICAgIHRoaXMuZW50cnlSZW1vdmVkQ2FsbGJhY2sgPSBmdW5jdGlv
bihkaXJlY3RvcnksIGVudHJ5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZW50cnkuaXNE
aXJlY3RvcnkpCisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucmVtb3ZlRGlyTWFwW2VudHJ5
LmZ1bGxQYXRoXTsKKworICAgICAgICAgICAgaWYgKGRpcmVjdG9yeSkgeworICAgICAgICAgICAg
ICAgIHZhciBkaXJJbmZvID0gdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXTsK
KyAgICAgICAgICAgICAgICBpZiAoLS1kaXJJbmZvLmVudHJpZXMgPT0gMCAmJiBkaXJJbmZvLmhh
c01vcmUgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRGlyZWN0b3J5
KGRpcmVjdG9yeSwgZGlySW5mby5wYXJlbnREaXJlY3RvcnkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJzaXZlbHlDYWxsYmFjayA9IGZ1bmN0
aW9uKGVudHJpZXMsIGRpcmVjdG9yeSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGhpcy5y
ZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXS5lbnRyaWVzKys7CisgICAgICAgICAgICAg
ICAgaWYgKGVudHJpZXNbaV0uaXNEaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgICAgIHRoaXMu
cmVtb3ZlUmVjdXJzaXZlbHlJbnRlcm5hbChlbnRyaWVzW2ldLCBkaXJlY3RvcnkpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVz
W2ldOworICAgICAgICAgICAgICAgICAgICBlbnRyeS5yZW1vdmUodGhpcy5iaW5kKHRoaXMuZW50
cnlSZW1vdmVkQ2FsbGJhY2ssIGRpcmVjdG9yeSwgZW50cnkpLCB0aGlzLmJpbmQodGhpcy5lcnJv
ckNhbGxiYWNrKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGVudHJpZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEaXJN
YXBbZGlyZWN0b3J5LmZ1bGxQYXRoXS5yZWFkZXIucmVhZEVudHJpZXModGhpcy5iaW5kKHRoaXMu
cmVtb3ZlUmVjdXJzaXZlbHlDYWxsYmFjaywgZGlyZWN0b3J5KSwgdGhpcy5iaW5kKHRoaXMuZXJy
b3JDYWxsYmFjaykpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIg
ZGlySW5mbyA9IHRoaXMucmVtb3ZlRGlyTWFwW2RpcmVjdG9yeS5mdWxsUGF0aF07CisgICAgICAg
ICAgICAgICAgZGlySW5mby5oYXNNb3JlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKGRp
ckluZm8uZW50cmllcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZURpcmVj
dG9yeShkaXJlY3RvcnksIGRpckluZm8ucGFyZW50RGlyZWN0b3J5KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZVJlY3Vyc2l2ZWx5SW50ZXJuYWwgPSBm
dW5jdGlvbihkaXJlY3RvcnksIHBhcmVudERpcmVjdG9yeSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZGlyZWN0b3J5UmVhZGVyID0gZGlyZWN0b3J5LmNyZWF0ZVJlYWRlcigpOworICAgICAgICAg
ICAgdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXSA9IHsKKyAgICAgICAgICAg
ICAgICBoYXNNb3JlOiB0cnVlLAorICAgICAgICAgICAgICAgIHBhcmVudERpcmVjdG9yeTogcGFy
ZW50RGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGVudHJpZXM6IDAsCisgICAgICAgICAgICAg
ICAgcmVhZGVyOiBkaXJlY3RvcnlSZWFkZXIsCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
ZGlyZWN0b3J5UmVhZGVyLnJlYWRFbnRyaWVzKHRoaXMuYmluZCh0aGlzLnJlbW92ZVJlY3Vyc2l2
ZWx5Q2FsbGJhY2ssIGRpcmVjdG9yeSksIHRoaXMuYmluZCh0aGlzLmVycm9yQ2FsbGJhY2spKTsK
KyAgICAgICAgfTsKKyAgICB9OworCisgICAgdmFyIGhlbHBlciA9IG5ldyBSZW1vdmVSZWN1cnNp
dmVIZWxwZXIoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBoZWxwZXIucmVt
b3ZlUmVjdXJzaXZlbHkoZGlyZWN0b3J5KTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbAppbmRleCA4YTFhMTVlNWMz
ODc0MTE1MDJkYzYyMDkyNjNlMDFhN2JiNGE0OTc3Li5mMjA3ZjFmMWZjNDZhM2E0YmUwZjZhMmZi
ZWUyMTYyNDY4MTgyZDQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0v
c2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lz
dGVtL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCkBAIC0yLDYgKzIsNyBAQAogPGhlYWQ+CiA8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+CiA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIj48L3NjcmlwdD4K
IDwvaGVhZD4KIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL3JlYWQtZGlyZWN0b3J5Lmpz
IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZWFkLWRpcmVjdG9y
eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYWFjZDM4NWYzNjI4MDA2YzJhNDUxMWZiZGI4NTIxNWNiNjMwMzQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10
ZXN0cy9yZWFkLWRpcmVjdG9yeS5qcwpAQCAtMCwwICsxLDEwMCBAQAorZGVzY3JpcHRpb24oIkRp
cmVjdG9yeVJlYWRlci5yZWFkRW50cmllcygpIHRlc3QuIik7Cit2YXIgZmlsZVN5c3RlbSA9IG51
bGw7Cit2YXIgcmVhZGVyID0gbnVsbDsKK3ZhciByZXN1bHRFbnRyaWVzID0gW107CisKK3ZhciBy
ZWFkRW50cmllc0NvdW50ID0gMDsKK3ZhciBlbnRyaWVzQ2FsbGJhY2tDb3VudCA9IDA7CisKKy8v
IHBhdGg6IGlzRGlyZWN0b3J5IG1hcC4KK3ZhciB0ZXN0RW50cmllcyA9IHsKKyAgICAnL2EnOiB0
cnVlLAorICAgICcvYic6IGZhbHNlLAorICAgICcvYyc6IHRydWUsCisgICAgJy9kJzogZmFsc2Us
CisgICAgJy9lJzogZmFsc2UsCisgICAgJy9mJzogdHJ1ZSwKK307Cit2YXIgdGVzdEVudHJpZXND
b3VudCA9IDA7CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGRlYnVnKCJEb25lLiIpOwor
ICAgIHJlbW92ZVJlY3Vyc2l2ZWx5KGZpbGVTeXN0ZW0ucm9vdCk7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBlcnJvckNhbGxiYWNrKGVycm9yKQoreworICAgIGRlYnVn
KCJFcnJvciBvY2N1cmVkOiIgKyBlcnJvci5jb2RlKTsKKyAgICBlbmRUZXN0KCk7Cit9CisKK3Zh
ciBlbnRyeSA9IG51bGw7CitmdW5jdGlvbiB2ZXJpZnlUZXN0UmVzdWx0KCkKK3sKKyAgICBzaG91
bGRCZSgncmVhZEVudHJpZXNDb3VudCcsICdlbnRyaWVzQ2FsbGJhY2tDb3VudCcpOworICAgIHNo
b3VsZEJlKCdyZXN1bHRFbnRyaWVzLmxlbmd0aCcsICd0ZXN0RW50cmllc0NvdW50Jyk7CisgICAg
Zm9yIChpID0gMDsgaSA8IHJlc3VsdEVudHJpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZW50
cnkgPSByZXN1bHRFbnRyaWVzW2ldOworICAgICAgICBkZWJ1ZygnRW50cnk6JyArIGVudHJ5LmZ1
bGxQYXRoICsgJyBpc0RpcmV0b3J5OicgKyBlbnRyeS5pc0RpcmVjdG9yeSk7CisgICAgICAgIHNo
b3VsZEJlKCd0ZXN0RW50cmllc1tlbnRyeS5mdWxsUGF0aF0nLCAnZW50cnkuaXNEaXJlY3Rvcnkn
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGVudHJpZXNDYWxsYmFjayhlbnRyaWVzKQoreworICAg
IGVudHJpZXNDYWxsYmFja0NvdW50Kys7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJp
ZXMubGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdEVudHJpZXMucHVzaChlbnRyaWVzW2ldKTsK
KworICAgIGlmIChlbnRyaWVzLmxlbmd0aCkgeworICAgICAgICByZWFkRW50cmllc0NvdW50Kys7
CisgICAgICAgIHJlYWRlci5yZWFkRW50cmllcyhlbnRyaWVzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE11c3QgaGF2ZSByZWFkIGFsbCB0aGUgZW50
cmllcy4KKyAgICAgICAgdmVyaWZ5VGVzdFJlc3VsdCgpOworICAgICAgICBlbmRUZXN0KCk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBydW5SZWFkRGlyZWN0b3J5VGVzdCgpCit7CisgICAgcmVhZEVu
dHJpZXNDb3VudCsrOworICAgIHJlYWRlciA9IGZpbGVTeXN0ZW0ucm9vdC5jcmVhdGVSZWFkZXIo
KTsKKyAgICByZWFkZXIucmVhZEVudHJpZXMoZW50cmllc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNr
KTsKK30KKworZnVuY3Rpb24gcHJlcGFyZUZvclRlc3QoKQoreworICAgIHZhciBqb2luID0gbmV3
IEpvaW5IZWxwZXIocnVuUmVhZERpcmVjdG9yeVRlc3QpOworICAgIHZhciBkb25lID0gZnVuY3Rp
b24oKSB7IGpvaW4uZG9uZSgpOyB9OworCisgICAgZm9yICh2YXIgcGF0aCBpbiB0ZXN0RW50cmll
cykgeworICAgICAgICB0ZXN0RW50cmllc0NvdW50Kys7CisgICAgICAgIGlmICh0ZXN0RW50cmll
c1twYXRoXSkKKyAgICAgICAgICAgIGpvaW4ucnVuKGZ1bmN0aW9uKCkgeyBmaWxlU3lzdGVtLnJv
b3QuZ2V0RGlyZWN0b3J5KHBhdGgsIHtjcmVhdGU6dHJ1ZX0sIGRvbmUsIGVycm9yQ2FsbGJhY2sp
OyB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgam9pbi5ydW4oZnVuY3Rpb24oKSB7IGZp
bGVTeXN0ZW0ucm9vdC5nZXRGaWxlKHBhdGgsIHtjcmVhdGU6dHJ1ZX0sIGRvbmUsIGVycm9yQ2Fs
bGJhY2spOyB9KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjayhmcykKK3sK
KyAgICBmaWxlU3lzdGVtID0gZnM7CisgICAgZGVidWcoIlN1Y2Nlc3NmdWxseSBvYnRhaW5lZCBQ
ZXJzaXN0ZW50IEZpbGVTeXN0ZW06IiArIGZpbGVTeXN0ZW0ubmFtZSk7CisKKyAgICByZW1vdmVS
ZWN1cnNpdmVseShmaWxlU3lzdGVtLnJvb3QsIHByZXBhcmVGb3JUZXN0LCBlcnJvckNhbGxiYWNr
KTsKK30KKworaWYgKHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSkgeworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKworICAgIHJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksIDEw
MCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKK30gZWxzZQorICAgIGRlYnVnKCJU
aGlzIHRlc3QgcmVxdWlyZXMgRmlsZVN5c3RlbSBBUEkgc3VwcG9ydC4iKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU0NTE0N2ZhODZlYjMwYjAxNjU5MTc3YTM5MzU1MmRiYzZh
ZjFkYWMuLjI1ZGRhY2VhMzQ3MjAxYzk2NDI0ZWUwOTI2NjRlMWU4MWM3MTA0NWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTAtMDktMjcgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBEaXJl
Y3RvcnlSZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFj
ayBwZXIgcmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ2NTYzCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlc3lzdGVtL3JlYWQtZGly
ZWN0b3J5Lmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0b3J5KTogQ2hhbmdlZCB0byB0
YWtlIERpcmVjdG9yeVJlYWRlcgorICAgICAgICBhcyBhIHBhcmFtZXRlci4KKyAgICAgICAgKiBm
aWxlYXBpL0RPTUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06
OnNjaGVkdWxlQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0RpcmVjdG9yeVJl
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlSZWFkZXI6OkRpcmVjdG9yeVJl
YWRlcik6IEFkZGVkIGluaXRpYWxpemVyIGZvcgorICAgICAgICBtX2hhc01vcmUgZmxhZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHJpZXMpOiBDaGFuZ2VkIHRv
IHNjaGVkdWxlCisgICAgICAgIEVudHJpZXNDYWxsYmFjayB3aXRoIGFuIGVtcHR5IGFycmF5IGlm
IG1faGFzTW9yZSBmbGFnIGlzIHNldCBmYWxzZS4KKyAgICAgICAgKiBmaWxlYXBpL0RpcmVjdG9y
eVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0b3J5UmVhZGVyOjpmaWxlc3lzdGVt
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlSZWFkZXI6OnNldEhhc01vcmUp
OiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVudHJpZXNDYWxsYmFja3M6OkVudHJpZXNDYWxsYmFja3MpOiBDaGFuZ2VkIHRvIHRha2UK
KyAgICAgICAgRGlyZWN0b3J5UmVhZGVyIGFzIGEgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6RW50cmllc0NhbGxiYWNrczo6ZGlkUmVhZERpcmVjdG9yeUVudHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWREaXJlY3RvcnlFbnRyaWVzKTogQ2hhbmdl
ZCAxKSBub3QgdG8KKyAgICAgICAgdHJpZ2dlciB0aGUgc2Vjb25kIGNhbGxiYWNrIHdoZW4gaGFz
TW9yZSBpcyBmYWxzZSwgYW5kIDIpIHRvIHVwZGF0ZQorICAgICAgICB0aGUgRGlyZWN0b3J5UmVh
ZGVyJ3MgbV9oYXNNb3JlIGZsYWcuCisgICAgICAgICogZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmg6CisKIDIwMTAtMDktMjcgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lz
dGVtLmNwcAppbmRleCAyYmQwOWMyZjBkZWNmN2I1MGZmYmQ4NDNiNjA0ZWExMWI0OTVkNGRhLi5i
MWIxY2RjMTFlNmRlNTNhMWU4NWJlYmUzYzU2YjNmZWU4ZDQ0MGRkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKKysrIGIvV2ViQ29yZS9maWxlYXBpL0RPTUZp
bGVTeXN0ZW0uY3BwCkBAIC0yMTQsMTEgKzIxNCwxMSBAQCB2b2lkIERPTUZpbGVTeXN0ZW06OmNy
ZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGUsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNh
bAogICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5jcmVhdGVXcml0ZXIoZmlsZVdyaXRlci5nZXQoKSwg
cGxhdGZvcm1QYXRoLCBjYWxsYmFja3MucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBET01GaWxlU3lz
dGVtOjpyZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVz
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJv
ckNhbGxiYWNrKQordm9pZCBET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0b3J5KERpcmVjdG9yeVJl
YWRlciogcmVhZGVyLCBjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8RW50cmllc0NhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxs
YmFjaykKIHsKICAgICBBU1NFUlQoRE9NRmlsZVBhdGg6OmlzQWJzb2x1dGUocGF0aCkpOwogICAg
IFN0cmluZyBwbGF0Zm9ybVBhdGggPSBtX2FzeW5jRmlsZVN5c3RlbS0+dmlydHVhbFRvUGxhdGZv
cm1QYXRoKHBhdGgpOwotICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHBsYXRm
b3JtUGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgdGhpcywgcGF0aCkpOworICAgIG1fYXN5bmNGaWxlU3lzdGVtLT5yZWFkRGlyZWN0
b3J5KHBsYXRmb3JtUGF0aCwgRW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgcmVhZGVyLCBwYXRoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oIGIvV2ViQ29yZS9maWxl
YXBpL0RPTUZpbGVTeXN0ZW0uaAppbmRleCA4ODFmZmM1OTM5MjQ5MDZkYmNhNWM4Y2Q5MzJmNjJj
ZDViOGFhMDFkLi44NDk4ZTc1YjVmNDQ2ZTNlZmU5Yjc4ZDY4MjdlZDMyZmFjZDRlZjcyIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oCisrKyBiL1dlYkNvcmUvZmls
ZWFwaS9ET01GaWxlU3lzdGVtLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgRGlyZWN0b3J5RW50cnk7CitjbGFzcyBEaXJlY3RvcnlSZWFkZXI7CiBjbGFz
cyBFbnRyeTsKIGNsYXNzIEVudHJ5Q2FsbGJhY2s7CiBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CkBA
IC03OCwxMyArNzksMjAgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0UGFyZW50KGNvbnN0IEVudHJ5
KiBlbnRyeSwgUGFzc1JlZlB0cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPik7CiAgICAgdm9pZCBnZXRGaWxlKGNvbnN0IEVudHJ5KiBiYXNlLCBjb25zdCBTdHJpbmcm
IHBhdGgsIFBhc3NSZWZQdHI8RmxhZ3M+LCBQYXNzUmVmUHRyPEVudHJ5Q2FsbGJhY2s+LCBQYXNz
UmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2b2lkIGdldERpcmVjdG9yeShjb25zdCBFbnRy
eSogYmFzZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPEZsYWdzPiwgUGFzc1JlZlB0
cjxFbnRyeUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7Ci0gICAgdm9pZCBy
ZWFkRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKKyAgICB2b2lkIHJlYWREaXJlY3Rvcnko
RGlyZWN0b3J5UmVhZGVyKiByZWFkZXIsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxF
bnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+KTsKICAgICB2b2lkIGNy
ZWF0ZVdyaXRlcihjb25zdCBGaWxlRW50cnkqIGZpbGUsIFBhc3NSZWZQdHI8RmlsZVdyaXRlckNh
bGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAKICAgICAvLyBTY2hlZHVsZSBh
IGNhbGxiYWNrLiBUaGlzIHNob3VsZCBub3QgY3Jvc3MgdGhyZWFkcyAoc2hvdWxkIGJlIGNhbGxl
ZCBvbiB0aGUgc2FtZSBjb250ZXh0IHRocmVhZCkuCisgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0
byBhIG1vcmUgZ2VuZXJpYyBwbGFjZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVu
YW1lIENCQXJnPgogICAgIHN0YXRpYyB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8Q0I+LCBQYXNzUmVmUHRyPENCQXJnPik7CiAKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQ0IsIHR5cGVuYW1lIENCQXJnPgorICAgIHZvaWQgc2NoZWR1bGVD
YWxsYmFjayhQYXNzUmVmUHRyPENCPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxDQkFyZz4gY2FsbGJh
Y2tBcmcpCisgICAgeworICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSwgY2FsbGJhY2ssIGNhbGxiYWNrQXJnKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
RE9NRmlsZVN5c3RlbShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzT3duUHRyPEFzeW5jRmlsZVN5c3RlbT4pOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Zp
bGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFk
ZXIuY3BwCmluZGV4IGIwZWVmMWNjNDkyNzZmMzNjNzk0MGU2NjkyY2EyZjVkNjAwZjA1MTUuLjA5
MmY5NzY0Mzg0MmJkMTZmNTM2ZTQ2MTc1M2UzYTc4Zjg1N2YxMzIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9EaXJl
Y3RvcnlSZWFkZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJET01GaWxlU3lz
dGVtLmgiCiAjaW5jbHVkZSAiRW50cmllc0NhbGxiYWNrLmgiCisjaW5jbHVkZSAiRW50cnlBcnJh
eS5oIgogI2luY2x1ZGUgIkVycm9yQ2FsbGJhY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDIsMTIgKzQzLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIERpcmVjdG9yeVJlYWRlcjo6
RGlyZWN0b3J5UmVhZGVyKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5c3RlbSwgY29u
c3QgU3RyaW5nJiBmdWxsUGF0aCkKICAgICA6IG1fZmlsZVN5c3RlbShmaWxlU3lzdGVtKQogICAg
ICwgbV9mdWxsUGF0aChmdWxsUGF0aCkKKyAgICAsIG1faGFzTW9yZSh0cnVlKQogewogfQogCiB2
b2lkIERpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHJpZXMoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJh
Y2s+IGVudHJpZXNDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrKQogewotICAgIG1fZmlsZVN5c3RlbS0+cmVhZERpcmVjdG9yeShtX2Z1bGxQYXRoLCBlbnRy
aWVzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOworICAgIGlmICghbV9oYXNNb3JlKSB7CisgICAg
ICAgIG1fZmlsZVN5c3RlbS0+c2NoZWR1bGVDYWxsYmFjayhlbnRyaWVzQ2FsbGJhY2ssIEVudHJ5
QXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ZpbGVTeXN0
ZW0tPnJlYWREaXJlY3RvcnkodGhpcywgbV9mdWxsUGF0aCwgZW50cmllc0NhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmls
ZWFwaS9EaXJlY3RvcnlSZWFkZXIuaCBiL1dlYkNvcmUvZmlsZWFwaS9EaXJlY3RvcnlSZWFkZXIu
aAppbmRleCAwZTJlZjBmNmNkMjI5Y2RkNGQ5NTdlMWVmNWIyNzRhNThjNjM5MWQwLi5hODVlMWVl
OWIzYTQxNmJlMzk0MTUwYWNhZmVmMTE5ZTBiZmU1YmM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Zp
bGVhcGkvRGlyZWN0b3J5UmVhZGVyLmgKKysrIGIvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeVJl
YWRlci5oCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRW50
cmllc0NhbGxiYWNrOwogY2xhc3MgRXJyb3JDYWxsYmFjazsKK2NsYXNzIEVudHJpZXNDYWxsYmFj
a3M7CiAKIGNsYXNzIERpcmVjdG9yeVJlYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPERpcmVjdG9y
eVJlYWRlcj4gewogcHVibGljOgpAQCAtNTAsMTMgKzUxLDE2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEaXJlY3RvcnlSZWFkZXIoZmlsZVN5c3RlbSwgcGF0aCkpOwog
ICAgIH0KIAotICAgIHZvaWQgcmVhZEVudHJpZXMoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
ID0gMCk7CisgICAgRE9NRmlsZVN5c3RlbSogZmlsZXN5c3RlbSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmlsZVN5c3RlbS5nZXQoKTsgfQorICAgIHZvaWQgcmVhZEVudHJpZXMoUGFzc1JlZlB0cjxFbnRy
aWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+ID0gMCk7CisgICAgdm9pZCBz
ZXRIYXNNb3JlKGJvb2wgaGFzTW9yZSkgeyBtX2hhc01vcmUgPSBoYXNNb3JlOyB9CiAKIHByaXZh
dGU6CiAgICAgRGlyZWN0b3J5UmVhZGVyKFBhc3NSZWZQdHI8RE9NRmlsZVN5c3RlbT4gZmlsZVN5
c3RlbSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAogICAgIFJlZlB0cjxET01GaWxlU3lzdGVtPiBt
X2ZpbGVTeXN0ZW07CiAgICAgU3RyaW5nIG1fZnVsbFBhdGg7CisgICAgYm9vbCBtX2hhc01vcmU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVT
eXN0ZW1DYWxsYmFja3MuY3BwIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3Mu
Y3BwCmluZGV4IDU1MGI1MDliNGI5NTNiOTQ2NDliMGJkYTM2NDcyMGQwOTllMzU2YTcuLjg3NTMy
OTE2YzllMjdiNDNjM2FjZDBlNTc5YzVhYWEzNzMzNjE4NjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVN5c3RlbUNhbGxiYWNrcy5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJET01GaWxl
UGF0aC5oIgogI2luY2x1ZGUgIkRPTUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJEaXJlY3RvcnlF
bnRyeS5oIgorI2luY2x1ZGUgIkRpcmVjdG9yeVJlYWRlci5oIgogI2luY2x1ZGUgIkVudHJpZXND
YWxsYmFjay5oIgogI2luY2x1ZGUgIkVudHJ5QXJyYXkuaCIKICNpbmNsdWRlICJFbnRyeUNhbGxi
YWNrLmgiCkBAIC0xMzcsMzggKzEzOCwzNCBAQCB2b2lkIEVudHJ5Q2FsbGJhY2tzOjpkaWRTdWNj
ZWVkKCkKIAogLy8gRW50cmllc0NhbGxiYWNrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNzT3duUHRyPEVudHJpZXNDYWxs
YmFja3M+IEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJh
Y2ssIERPTUZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpCitQ
YXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShQYXNz
UmVmUHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIERpcmVjdG9yeVJlYWRlciogZGlyZWN0b3J5UmVhZGVy
LCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgRW50
cmllc0NhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGZpbGVTeXN0ZW0s
IGJhc2VQYXRoKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBFbnRyaWVzQ2FsbGJhY2tzKHN1
Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgZGlyZWN0b3J5UmVhZGVyLCBiYXNlUGF0aCkp
OwogfQogCi1FbnRyaWVzQ2FsbGJhY2tzOjpFbnRyaWVzQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RW50
cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgRE9NRmlsZVN5c3RlbSogZmlsZVN5c3RlbSwgY29uc3QgU3RyaW5nJiBi
YXNlUGF0aCkKK0VudHJpZXNDYWxsYmFja3M6OkVudHJpZXNDYWxsYmFja3MoUGFzc1JlZlB0cjxF
bnRyaWVzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLCBEaXJlY3RvcnlSZWFkZXIqIGRpcmVjdG9yeVJlYWRlciwgY29uc3Qg
U3RyaW5nJiBiYXNlUGF0aCkKICAgICA6IEZpbGVTeXN0ZW1DYWxsYmFja3NCYXNlKGVycm9yQ2Fs
bGJhY2spCiAgICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0gICAgLCBt
X2ZpbGVTeXN0ZW0oZmlsZVN5c3RlbSkKKyAgICAsIG1fZGlyZWN0b3J5UmVhZGVyKGRpcmVjdG9y
eVJlYWRlcikKICAgICAsIG1fYmFzZVBhdGgoYmFzZVBhdGgpCiAgICAgLCBtX2VudHJpZXMoRW50
cnlBcnJheTo6Y3JlYXRlKCkpCiB7CisgICAgQVNTRVJUKG1fZGlyZWN0b3J5UmVhZGVyKTsKIH0K
IAogdm9pZCBFbnRyaWVzQ2FsbGJhY2tzOjpkaWRSZWFkRGlyZWN0b3J5RW50cnkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIGlzRGlyZWN0b3J5KQogewogICAgIGlmIChpc0RpcmVjdG9yeSkKLSAg
ICAgICAgbV9lbnRyaWVzLT5hcHBlbmQoRGlyZWN0b3J5RW50cnk6OmNyZWF0ZShtX2ZpbGVTeXN0
ZW0sIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNlUGF0aCwgbmFtZSkpKTsKKyAgICAgICAgbV9l
bnRyaWVzLT5hcHBlbmQoRGlyZWN0b3J5RW50cnk6OmNyZWF0ZShtX2RpcmVjdG9yeVJlYWRlci0+
ZmlsZXN5c3RlbSgpLCBET01GaWxlUGF0aDo6YXBwZW5kKG1fYmFzZVBhdGgsIG5hbWUpKSk7CiAg
ICAgZWxzZQotICAgICAgICBtX2VudHJpZXMtPmFwcGVuZChGaWxlRW50cnk6OmNyZWF0ZShtX2Zp
bGVTeXN0ZW0sIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNlUGF0aCwgbmFtZSkpKTsKKyAgICAg
ICAgbV9lbnRyaWVzLT5hcHBlbmQoRmlsZUVudHJ5OjpjcmVhdGUobV9kaXJlY3RvcnlSZWFkZXIt
PmZpbGVzeXN0ZW0oKSwgRE9NRmlsZVBhdGg6OmFwcGVuZChtX2Jhc2VQYXRoLCBuYW1lKSkpOwog
fQogCiB2b2lkIEVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWREaXJlY3RvcnlFbnRyaWVzKGJvb2wg
aGFzTW9yZSkKIHsKICAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsKKyAgICAgICAgbV9kaXJl
Y3RvcnlSZWFkZXItPnNldEhhc01vcmUoaGFzTW9yZSk7CiAgICAgICAgIG1fc3VjY2Vzc0NhbGxi
YWNrLT5oYW5kbGVFdmVudChtX2VudHJpZXMuZ2V0KCkpOwotICAgICAgICBpZiAoIW1fZW50cmll
cy0+aXNFbXB0eSgpICYmICFoYXNNb3JlKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIHJl
dHVybmVkIHNvbWUgZW50cmllcyBhbmQgdGhlcmUncmUgbm8gbW9yZSBjb21pbmcgZW50cmllcyAo
aGFzTW9yZT09ZmFsc2UpLCBjYWxsIGJhY2sgb25jZSBtb3JlIHdpdGggYW4gZW1wdHkgYXJyYXku
Ci0gICAgICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoRW50cnlBcnJheTo6
Y3JlYXRlKCkuZ2V0KCkpOwotICAgICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsK
LSAgICAgICAgfQotICAgICAgICBtX2VudHJpZXMtPmNsZWFyKCk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oIGIvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuaAppbmRleCAzNjQ3YWQzMTliNjc4NjQ2NjJlOWQ4
ZGY2M2I5ZWI0OTc0YWVhMTU0Li43ZjE4NmVmMjc1NGFlNTYyNjUyYzFmNGZkY2YxNjA2YzMyMzVk
NGI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oCisr
KyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKQEAgLTQyLDYgKzQyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBc3luY0ZpbGVXcml0ZXI7CiBjbGFzcyBE
T01GaWxlU3lzdGVtOworY2xhc3MgRGlyZWN0b3J5UmVhZGVyOwogY2xhc3MgRXJyb3JDYWxsYmFj
azsKIGNsYXNzIEVudHJpZXNDYWxsYmFjazsKIGNsYXNzIEVudHJ5QXJyYXk7CkBAIC05OCwxNCAr
OTksMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgRW50cmllc0NhbGxiYWNrcyA6IHB1YmxpYyBGaWxl
U3lzdGVtQ2FsbGJhY2tzQmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8RW50
cmllc0NhbGxiYWNrcz4gY3JlYXRlKFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxFcnJvckNhbGxiYWNrPiwgRE9NRmlsZVN5c3RlbSosIGNvbnN0IFN0cmluZyYgYmFzZVBh
dGgpOworICAgIHN0YXRpYyBQYXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IGNyZWF0ZShQYXNz
UmVmUHRyPEVudHJpZXNDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4sIERpcmVj
dG9yeVJlYWRlciosIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWFkRGlyZWN0b3J5RW50cnkoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIGlzRGlyZWN0b3J5
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVjdG9yeUVudHJpZXMoYm9vbCBoYXNNb3Jl
KTsKIAogcHJpdmF0ZToKLSAgICBFbnRyaWVzQ2FsbGJhY2tzKFBhc3NSZWZQdHI8RW50cmllc0Nh
bGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwgRE9NRmlsZVN5c3RlbSosIGNvbnN0
IFN0cmluZyYgYmFzZVBhdGgpOworICAgIEVudHJpZXNDYWxsYmFja3MoUGFzc1JlZlB0cjxFbnRy
aWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9yQ2FsbGJhY2s+LCBEaXJlY3RvcnlSZWFkZXIq
LCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKTsKICAgICBSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBt
X3N1Y2Nlc3NDYWxsYmFjazsKLSAgICBET01GaWxlU3lzdGVtKiBtX2ZpbGVTeXN0ZW07CisgICAg
RGlyZWN0b3J5UmVhZGVyKiBtX2RpcmVjdG9yeVJlYWRlcjsKICAgICBTdHJpbmcgbV9iYXNlUGF0
aDsKICAgICBSZWZQdHI8RW50cnlBcnJheT4gbV9lbnRyaWVzOwogfTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDkyMTE1NTljZWEzOGZmOTlkNDk3NGE0MjAyODczNTdkMjkyYmI5NzkuLmQxNTY1MzRmNDExZjc4
MTFiMWQ4MDA3NDBjZDI4YjRkNjg2Y2VjYzQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDEwLTA5LTI3ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggRGlyZWN0b3J5
UmVhZGVyJ3MgYmVoYXZpb3IgdG8gdHJpZ2dlciBvbmx5IG9uZSBFbnRyaWVzQ2FsbGJhY2sgcGVy
IHJlYWRFbnRyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NjU2MworCisgICAgICAgICogc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWRE
aXJlY3RvcnkpOgorCiAyMDEwLTA5LTI3ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQnVpbGQgZml4LiBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwCmluZGV4IGEyM2FkZDdiZmUx
MDYzMTE5NTVmYWExZDg3YzVmYjg1NWUxZDQzYzIuLmYyNjQ5MTQ0YzQ0YWZkYjlkMjBmMzg5OWMz
NDI4YmE4MGU2MWVjNGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmlsZVN5
c3RlbUNhbGxiYWNrc0ltcGwuY3BwCkBAIC03MCwxMSArNzAsMTMgQEAgdm9pZCBXZWJGaWxlU3lz
dGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVhZE1ldGFkYXRhKGNvbnN0IFdlYkZpbGVJbmZvJiBpbmZv
KQogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkUmVhZERpcmVjdG9yeShjb25z
dCBXZWJWZWN0b3I8V2ViRmlsZVN5c3RlbUVudHJ5PiYgZW50cmllcywgYm9vbCBoYXNNb3JlKQog
ewogICAgIEFTU0VSVChtX2NhbGxiYWNrcyk7CisgICAgLy8gRklYTUU6IEN1cnJlbnQgaW1wbGVt
ZW50YXRpb24gZG9lcyBOT1Qgc3VwcG9ydCBjaHVuayByZWFkaW5nLgorICAgIC8vIFJlbW92ZSB0
aGlzIEFTU0VSVCB3aGVuIHdlIHN1cHBvcnQgY2h1bmsgcmVhZGluZy4KKyAgICBBU1NFUlQoIWhh
c01vcmUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7ICsraSkK
ICAgICAgICAgbV9jYWxsYmFja3MtPmRpZFJlYWREaXJlY3RvcnlFbnRyeShlbnRyaWVzW2ldLm5h
bWUsIGVudHJpZXNbaV0uaXNEaXJlY3RvcnkpOwogICAgIG1fY2FsbGJhY2tzLT5kaWRSZWFkRGly
ZWN0b3J5RW50cmllcyhoYXNNb3JlKTsKLSAgICBpZiAoIWhhc01vcmUpCi0gICAgICAgIGRlbGV0
ZSB0aGlzOworICAgIGRlbGV0ZSB0aGlzOwogfQogCiB2b2lkIFdlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpkaWRPcGVuRmlsZVN5c3RlbShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YlN0cmluZyYgcGF0aCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69215</attachid>
            <date>2010-09-29 10:43:40 -0700</date>
            <delta_ts>2010-09-29 14:25:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-46563-20100929104338.patch</filename>
            <type>text/plain</type>
            <size>28033</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjMWI1Yzg5N2M3MjJlOWQ2M2ZlZjRmNDAxYzhlYzUzYzJiYjk4MDVlLi41ZDE4OGIz
ZjY0ZmY5NWM5NzZkZjlmZDMxZTY5ZjJmZTJkMmEyOGYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTAtMDktMjkgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBEaXJlY3RvcnlS
ZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFjayBwZXIg
cmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQ2NTYzCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vZmxhZ3MtcGFzc2luZy5odG1s
OiBVcGRhdGVkIHRvIG1ha2UgaXQgbWF0Y2gKKyAgICAgICAgd2l0aCB0aGUgdXBkYXRlZCBURU1Q
TEFURS5odG1sLgorICAgICAgICAqIGZhc3QvZmlsZXN5c3RlbS9mbGFncy1wYXNzaW5nLWV4cGVj
dGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzeXN0ZW0vcmVhZC1kaXJlY3Rv
cnkuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0b3J5
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Jlc291cmNl
cy9mcy10ZXN0LXV0aWwuanM6IEFkZGVkIGZvciBjb21tb24gdGVzdAorICAgICAgICB1dGlsaXRp
ZXMuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1s
OiBVcGRhdGVkIHRvIGluY2x1ZGUKKyAgICAgICAgZnMtdGVzdC11dGlsLmpzLgorICAgICAgICAq
IGZhc3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvZmxhZ3MtcGFzc2luZy5qczogVXBkYXRlZCB0
byB1c2UKKyAgICAgICAganNUZXN0SXNBc3luYyBhbmQgZmluaXNoSlNUZXN0IChzbyB0aGF0IGFs
bCB0aGUgdGVzdHMgbG9vayBhbGlrZSkuCisgICAgICAgICogZmFzdC9maWxlc3lzdGVtL3Njcmlw
dC10ZXN0cy9yZWFkLWRpcmVjdG9yeS5qczogQWRkZWQuCisKIDIwMTAtMDktMjggIEpvaG5ueSBE
aW5nICA8am5kQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRo
LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZsYWdzLXBhc3Npbmct
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZsYWdzLXBhc3Npbmct
ZXhwZWN0ZWQudHh0CmluZGV4IDMzMGM4M2ZjZTk5NmQ5ZTQyNTZjOTQyNWQwNDU0OTY1ZGI4NDY2
ODYuLjU3NWE3ZjY5ZjJlZjYyYzNmZDA3MDg0NmFlMmE1YTRhNjQzMTI2OGEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9mbGFncy1wYXNzaW5nLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmxhZ3MtcGFzc2luZy1leHBlY3RlZC50
eHQKQEAgLTMsOSArMyw2IEBAIFBhc3NpbmcgRmxhZ3MgcGFyYW1ldGVyIHRlc3RzLiBUaGlzIHRl
c3QgY2hlY2tzIGlmIHBhc3NpbmcgRmxhZ3MgcGFyYW1ldGVycyAoaW4KIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KIAogCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1Qg
Q09NUExFVEUKICogUGFzc2luZyBhIEZsYWdzIG9iamVjdC4KICogUmVjeWNsaW5nIHRoZSBzYW1l
IEZsYWdzIG9iamVjdC4KICogUGFzc2luZyBhIEZsYWdzIG9iamVjdCAod2l0aCBleGNsdXNpdmU9
dHJ1ZSkuCkBAIC0xNCw0ICsxMSw3IEBAIFRFU1QgQ09NUExFVEUKIEZpbmlzaGVkIHJ1bm5pbmcg
dGVzdHMuCiBQQVNTIGV4cGVjdGVkQ2FsbGJhY2tzQ291bnQgaXMgMwogUEFTUyB1bmV4cGVjdGVk
Q2FsbGJhY2tzQ291bnQgaXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9m
bGFncy1wYXNzaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vZmxhZ3MtcGFz
c2luZy5odG1sCmluZGV4IDcwYWRkNjYyNTI1ZjYxNDJjMmQ2MGY5MDBlMjQ3YmZlNmI2Y2IxZmIu
LmYzNDc0NDY2ZmVjMjQ5YjkxN2M4NTZiZDgzOTRmZTMxZjJlZGJiZGMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9mbGFncy1wYXNzaW5nLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlc3lzdGVtL2ZsYWdzLXBhc3NpbmcuaHRtbApAQCAtMiw2ICsyLDcgQEAK
IDxoZWFkPgogPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgogPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcyI+
PC9zY3JpcHQ+CiA8L2hlYWQ+CiA8Ym9keT4KIDxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3JlYWQtZGlyZWN0b3J5LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZWFkLWRpcmVjdG9yeS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY0MjRjNzhkZmVmZDg2YzQwNjZkYWQ4MDc0MTc0MjhkMDYx
OGFjNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZWFk
LWRpcmVjdG9yeS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNCBAQAorRGlyZWN0b3J5UmVhZGVy
LnJlYWRFbnRyaWVzKCkgdGVzdC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1N1
Y2Nlc3NmdWxseSBvYnRhaW5lZCBQZXJzaXN0ZW50IEZpbGVTeXN0ZW06VGVzdFNoZWxsRmlsZVN5
c3RlbQorUEFTUyByZWFkRW50cmllc0NvdW50IGlzIGVudHJpZXNDYWxsYmFja0NvdW50CitQQVNT
IHJlc3VsdEVudHJpZXMubGVuZ3RoIGlzIHRlc3RFbnRyaWVzQ291bnQKK0VudHJ5Oi9kIGlzRGly
ZXRvcnk6ZmFsc2UKK1BBU1MgdGVzdEVudHJpZXNbZW50cnkuZnVsbFBhdGhdIGlzIGVudHJ5Lmlz
RGlyZWN0b3J5CitFbnRyeTovZiBpc0RpcmV0b3J5OnRydWUKK1BBU1MgdGVzdEVudHJpZXNbZW50
cnkuZnVsbFBhdGhdIGlzIGVudHJ5LmlzRGlyZWN0b3J5CitFbnRyeTovZSBpc0RpcmV0b3J5OmZh
bHNlCitQQVNTIHRlc3RFbnRyaWVzW2VudHJ5LmZ1bGxQYXRoXSBpcyBlbnRyeS5pc0RpcmVjdG9y
eQorRW50cnk6L2EgaXNEaXJldG9yeTp0cnVlCitQQVNTIHRlc3RFbnRyaWVzW2VudHJ5LmZ1bGxQ
YXRoXSBpcyBlbnRyeS5pc0RpcmVjdG9yeQorRW50cnk6L2MgaXNEaXJldG9yeTp0cnVlCitQQVNT
IHRlc3RFbnRyaWVzW2VudHJ5LmZ1bGxQYXRoXSBpcyBlbnRyeS5pc0RpcmVjdG9yeQorRW50cnk6
L2IgaXNEaXJldG9yeTpmYWxzZQorUEFTUyB0ZXN0RW50cmllc1tlbnRyeS5mdWxsUGF0aF0gaXMg
ZW50cnkuaXNEaXJlY3RvcnkKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVh
ZC1kaXJlY3RvcnkuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9yZWFkLWRpcmVj
dG9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY4M2E5NjY2NDM0NGIzMmQ3OGQ2MjA3NDg3YTlhYzFmZWNj
Mjc5ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vcmVh
ZC1kaXJlY3RvcnkuaHRtbApAQCAtMCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2ZzLXRlc3QtdXRpbC5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3JlYWQtZGlyZWN0b3J5LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXN5c3RlbS9yZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
c3lzdGVtL3Jlc291cmNlcy9mcy10ZXN0LXV0aWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDRlODY5Nzg1ODMy
NGZkODcwMzM4NDdkMjNkZmUzZjBhYWY1Yjg4MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZmlsZXN5c3RlbS9yZXNvdXJjZXMvZnMtdGVzdC11dGlsLmpzCkBAIC0wLDAgKzEs
MTA3IEBACit2YXIgSm9pbkhlbHBlciA9IGZ1bmN0aW9uKGNhbGxiYWNrKQoreworICAgIHRoaXMu
cGVuZGluZ09wZXJhdGlvbnMgPSAwOworICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKKwor
ICAgIHRoaXMucnVuID0gZnVuY3Rpb24ob3BlcmF0aW9uKSB7CisgICAgICAgIHRoaXMucGVuZGlu
Z09wZXJhdGlvbnMrKzsKKyAgICAgICAgb3BlcmF0aW9uKCk7CisgICAgfTsKKworICAgIHRoaXMu
ZG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB0aGlzLnBlbmRpbmdPcGVyYXRpb25zLS07Cisg
ICAgICAgIGlmICh0aGlzLnBlbmRpbmdPcGVyYXRpb25zID09IDApCisgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgIH07Cit9OworCisvLyBGSVhNRTogcmVwbGFjZSB0aGlzIHdpdGggdGhlIEFQ
SSdzIG9uZSBvbmNlIHRoZSBiYWNrZW5kIGZ1bGx5IHN1cHBvcnRzIHJlbW92ZVJlY3Vyc2l2ZWx5
LgorZnVuY3Rpb24gcmVtb3ZlUmVjdXJzaXZlbHkoZGlyZWN0b3J5LCBzdWNjZXNzQ2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2spIHsKKyAgICB2YXIgUmVtb3ZlUmVjdXJzaXZlSGVscGVyID0gZnVuY3Rp
b24oc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7CisgICAgICAgIHRoaXMucmVtb3Zl
RGlyTWFwID0ge307CisgICAgICAgIHRoaXMuc3VjY2Vzc0NhbGxiYWNrID0gc3VjY2Vzc0NhbGxi
YWNrOworICAgICAgICB0aGlzLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOworCisgICAg
ICAgIHRoaXMucmVtb3ZlUmVjdXJzaXZlbHkgPSBmdW5jdGlvbihkaXJlY3RvcnkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJzaXZlbHlJbnRlcm5hbChkaXJlY3Rvcnkp
OworICAgICAgICB9OworCisgICAgICAgIHRoaXMuaGFzTW9yZUVudHJpZXMgPSBmdW5jdGlvbiho
YXNoKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGsgaW4gaGFzaCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfTsK
KworICAgICAgICB0aGlzLmJpbmQgPSBmdW5jdGlvbihjYWxsYmFjaywgYXJnMSwgYXJnMiwgYXJn
MykKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXM7CisgICAgICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oYXJnKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSB1bmRlZmlu
ZWQpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG9iaiwgW2FyZzEsIGFyZzIs
IGFyZzNdKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrLmFwcGx5KG9iaiwgW2FyZywgYXJnMSwgYXJnMiwgYXJnM10pOworICAgICAgICAgICAgfTsK
KyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZURpcmVjdG9yeSA9IGZ1bmN0aW9uKGRp
cmVjdG9yeSwgcGFyZW50RGlyZWN0b3J5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZGly
ZWN0b3J5LmZ1bGxQYXRoICE9ICcvJykgeworICAgICAgICAgICAgICAgIC8vIE9rIHRvIHJlbW92
ZSB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkucmVtb3Zl
KHRoaXMuYmluZCh0aGlzLmVudHJ5UmVtb3ZlZENhbGxiYWNrLCBwYXJlbnREaXJlY3RvcnksIGRp
cmVjdG9yeSksIHRoaXMuYmluZCh0aGlzLkVycm9yQ2FsbGJhY2spKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbW92ZURpck1hcFtkaXJlY3Rvcnku
ZnVsbFBhdGhdOworICAgICAgICAgICAgaWYgKCF0aGlzLmhhc01vcmVFbnRyaWVzKHRoaXMucmVt
b3ZlRGlyTWFwKSAmJiB0aGlzLnN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgICAgICAgICB0aGlz
LnN1Y2Nlc3NDYWxsYmFjaygpOworICAgICAgICB9OworCisgICAgICAgIHRoaXMuZW50cnlSZW1v
dmVkQ2FsbGJhY2sgPSBmdW5jdGlvbihkaXJlY3RvcnksIGVudHJ5KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMucmVtb3ZlRGlyTWFwW2VudHJ5LmZ1bGxQYXRoXTsKKworICAgICAgICAgICAgaWYgKGRpcmVj
dG9yeSkgeworICAgICAgICAgICAgICAgIHZhciBkaXJJbmZvID0gdGhpcy5yZW1vdmVEaXJNYXBb
ZGlyZWN0b3J5LmZ1bGxQYXRoXTsKKyAgICAgICAgICAgICAgICBpZiAoLS1kaXJJbmZvLmVudHJp
ZXMgPT0gMCAmJiBkaXJJbmZvLmhhc01vcmUgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgICAg
IHRoaXMucmVtb3ZlRGlyZWN0b3J5KGRpcmVjdG9yeSwgZGlySW5mby5wYXJlbnREaXJlY3Rvcnkp
OworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJz
aXZlbHlDYWxsYmFjayA9IGZ1bmN0aW9uKGVudHJpZXMsIGRpcmVjdG9yeSkKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXS5lbnRy
aWVzKys7CisgICAgICAgICAgICAgICAgaWYgKGVudHJpZXNbaV0uaXNEaXJlY3RvcnkpCisgICAg
ICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlUmVjdXJzaXZlbHlJbnRlcm5hbChlbnRyaWVzW2ld
LCBkaXJlY3RvcnkpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgZW50cnkgPSBlbnRyaWVzW2ldOworICAgICAgICAgICAgICAgICAgICBlbnRyeS5yZW1v
dmUodGhpcy5iaW5kKHRoaXMuZW50cnlSZW1vdmVkQ2FsbGJhY2ssIGRpcmVjdG9yeSwgZW50cnkp
LCB0aGlzLmJpbmQodGhpcy5lcnJvckNhbGxiYWNrKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQYXRoXS5yZWFkZXIucmVhZEVu
dHJpZXModGhpcy5iaW5kKHRoaXMucmVtb3ZlUmVjdXJzaXZlbHlDYWxsYmFjaywgZGlyZWN0b3J5
KSwgdGhpcy5iaW5kKHRoaXMuZXJyb3JDYWxsYmFjaykpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB2YXIgZGlySW5mbyA9IHRoaXMucmVtb3ZlRGlyTWFwW2RpcmVjdG9y
eS5mdWxsUGF0aF07CisgICAgICAgICAgICAgICAgZGlySW5mby5oYXNNb3JlID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgaWYgKGRpckluZm8uZW50cmllcyA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICB0aGlzLnJlbW92ZURpcmVjdG9yeShkaXJlY3RvcnksIGRpckluZm8ucGFyZW50RGlyZWN0
b3J5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0aGlzLnJlbW92ZVJl
Y3Vyc2l2ZWx5SW50ZXJuYWwgPSBmdW5jdGlvbihkaXJlY3RvcnksIHBhcmVudERpcmVjdG9yeSkK
KyAgICAgICAgeworICAgICAgICAgICAgZGlyZWN0b3J5UmVhZGVyID0gZGlyZWN0b3J5LmNyZWF0
ZVJlYWRlcigpOworICAgICAgICAgICAgdGhpcy5yZW1vdmVEaXJNYXBbZGlyZWN0b3J5LmZ1bGxQ
YXRoXSA9IHsKKyAgICAgICAgICAgICAgICBoYXNNb3JlOiB0cnVlLAorICAgICAgICAgICAgICAg
IHBhcmVudERpcmVjdG9yeTogcGFyZW50RGlyZWN0b3J5LAorICAgICAgICAgICAgICAgIGVudHJp
ZXM6IDAsCisgICAgICAgICAgICAgICAgcmVhZGVyOiBkaXJlY3RvcnlSZWFkZXIsCisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgZGlyZWN0b3J5UmVhZGVyLnJlYWRFbnRyaWVzKHRoaXMuYmlu
ZCh0aGlzLnJlbW92ZVJlY3Vyc2l2ZWx5Q2FsbGJhY2ssIGRpcmVjdG9yeSksIHRoaXMuYmluZCh0
aGlzLmVycm9yQ2FsbGJhY2spKTsKKyAgICAgICAgfTsKKyAgICB9OworCisgICAgdmFyIGhlbHBl
ciA9IG5ldyBSZW1vdmVSZWN1cnNpdmVIZWxwZXIoc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrKTsKKyAgICBoZWxwZXIucmVtb3ZlUmVjdXJzaXZlbHkoZGlyZWN0b3J5KTsKK30KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvVEVNUExBVEUu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVzdHMvVEVNUExBVEUu
aHRtbAppbmRleCA4YTFhMTVlNWMzODc0MTE1MDJkYzYyMDkyNjNlMDFhN2JiNGE0OTc3Li5mMjA3
ZjFmMWZjNDZhM2E0YmUwZjZhMmZiZWUyMTYyNDY4MTgyZDQ1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sCkBAIC0y
LDYgKzIsNyBAQAogPGhlYWQ+CiA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CiA8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZnMtdGVz
dC11dGlsLmpzIj48L3NjcmlwdD4KIDwvaGVhZD4KIDxib2R5PgogPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRl
c3RzL2ZsYWdzLXBhc3NpbmcuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0
LXRlc3RzL2ZsYWdzLXBhc3NpbmcuanMKaW5kZXggNGIyNzIyOWU0ZDc5MjBlOTE3NjIxYzFiMjll
YTVjYzVlMTAzYjVjNy4uMDc4OWE5OWNkYWVmYzc1MTdmNWY1MTRmZjAzNzhjNTJiODM4OTAwMSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9mbGFn
cy1wYXNzaW5nLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXN5c3RlbS9zY3JpcHQtdGVz
dHMvZmxhZ3MtcGFzc2luZy5qcwpAQCAtMTYsMjYgKzE2LDE5IEBAIHZhciB0ZXN0c0xpc3QgPSBb
CiBdOwogdmFyIHRlc3RDb3VudGVyID0gMDsKIAotZnVuY3Rpb24gZW5kVGVzdCgpIHsKLSAgICBk
ZWJ1ZygiRmluaXNoZWQgcnVubmluZyB0ZXN0cy4iKTsKLSAgICBzaG91bGRCZSgnZXhwZWN0ZWRD
YWxsYmFja3NDb3VudCcsICczJyk7Ci0gICAgc2hvdWxkQmUoJ3VuZXhwZWN0ZWRDYWxsYmFja3ND
b3VudCcsICcwJyk7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotCiBmdW5jdGlvbiBydW5O
ZXh0VGVzdCh2KSB7Ci0gICAgaWYgKHRlc3RDb3VudGVyID09IHRlc3RzTGlzdC5sZW5ndGgpCi0g
ICAgICAgIGVuZFRlc3QoKTsKLSAgICBlbHNlCisgICAgaWYgKHRlc3RDb3VudGVyID09IHRlc3Rz
TGlzdC5sZW5ndGgpIHsKKyAgICAgICAgZGVidWcoIkZpbmlzaGVkIHJ1bm5pbmcgdGVzdHMuIik7
CisgICAgICAgIHNob3VsZEJlKCdleHBlY3RlZENhbGxiYWNrc0NvdW50JywgJzMnKTsKKyAgICAg
ICAgc2hvdWxkQmUoJ3VuZXhwZWN0ZWRDYWxsYmFja3NDb3VudCcsICcwJyk7CisgICAgICAgIGZp
bmlzaEpTVGVzdCgpOworICAgIH0gZWxzZQogICAgICAgICB0aGlzW3Rlc3RzTGlzdFt0ZXN0Q291
bnRlcisrXV0oKTsKIH0KIAogZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhlcnJvcikgewogICAgIGRl
YnVnKCJFcnJvciBvY2N1cmVkIGR1cmluZyByZXF1ZXN0aW5nIFRlbXBvcmFyeSBGaWxlU3lzdGVt
OiIgKyBlcnJvci5jb2RlKTsKLQotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICBmaW5pc2hK
U1Rlc3QoKTsKIH0KIAogLy8gVGVzdCBib2R5IGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05MywxMSArODYsOSBAQCBmdW5j
dGlvbiBmaWxlU3lzdGVtQ2FsbGJhY2soZnMpIHsKIH0KIAogaWYgKHdpbmRvdy5yZXF1ZXN0Rmls
ZVN5c3RlbSkgewotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKLQogICAgIHJlcXVlc3RGaWxl
U3lzdGVtKHdpbmRvdy5URU1QT1JBUlksIDEwMCwgZmlsZVN5c3RlbUNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrKTsKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CiB9IGVsc2UKICAgICBk
ZWJ1ZygiVGhpcyB0ZXN0IHJlcXVpcmVzIEZpbGVTeXN0ZW0gQVBJIHN1cHBvcnQuIik7CiAKLXZh
ciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOword2luZG93LnN1Y2Nlc3NmdWxseVBhcnNlZCA9
IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzeXN0ZW0vc2NyaXB0LXRl
c3RzL3JlYWQtZGlyZWN0b3J5LmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlc3lzdGVtL3Njcmlw
dC10ZXN0cy9yZWFkLWRpcmVjdG9yeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWE3MzBiOTc3YzhjNmU3NDBk
OThiMjYwNmI5ZjA5MGU3ZDhmMTFmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlc3lzdGVtL3NjcmlwdC10ZXN0cy9yZWFkLWRpcmVjdG9yeS5qcwpAQCAtMCwwICsxLDk1
IEBACitkZXNjcmlwdGlvbigiRGlyZWN0b3J5UmVhZGVyLnJlYWRFbnRyaWVzKCkgdGVzdC4iKTsK
K3ZhciBmaWxlU3lzdGVtID0gbnVsbDsKK3ZhciByZWFkZXIgPSBudWxsOwordmFyIHJlc3VsdEVu
dHJpZXMgPSBbXTsKKwordmFyIHJlYWRFbnRyaWVzQ291bnQgPSAwOwordmFyIGVudHJpZXNDYWxs
YmFja0NvdW50ID0gMDsKKworLy8gcGF0aDogaXNEaXJlY3RvcnkgbWFwLgordmFyIHRlc3RFbnRy
aWVzID0geworICAgICcvYSc6IHRydWUsCisgICAgJy9iJzogZmFsc2UsCisgICAgJy9jJzogdHJ1
ZSwKKyAgICAnL2QnOiBmYWxzZSwKKyAgICAnL2UnOiBmYWxzZSwKKyAgICAnL2YnOiB0cnVlLAor
fTsKK3ZhciB0ZXN0RW50cmllc0NvdW50ID0gMDsKKworZnVuY3Rpb24gZW5kVGVzdCgpCit7Cisg
ICAgcmVtb3ZlUmVjdXJzaXZlbHkoZmlsZVN5c3RlbS5yb290KTsKKyAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhlcnJvcikKK3sKKyAgICBkZWJ1ZygiRXJy
b3Igb2NjdXJlZDoiICsgZXJyb3IuY29kZSk7CisgICAgZW5kVGVzdCgpOworfQorCit2YXIgZW50
cnkgPSBudWxsOworZnVuY3Rpb24gdmVyaWZ5VGVzdFJlc3VsdCgpCit7CisgICAgc2hvdWxkQmUo
J3JlYWRFbnRyaWVzQ291bnQnLCAnZW50cmllc0NhbGxiYWNrQ291bnQnKTsKKyAgICBzaG91bGRC
ZSgncmVzdWx0RW50cmllcy5sZW5ndGgnLCAndGVzdEVudHJpZXNDb3VudCcpOworICAgIGZvciAo
aSA9IDA7IGkgPCByZXN1bHRFbnRyaWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGVudHJ5ID0g
cmVzdWx0RW50cmllc1tpXTsKKyAgICAgICAgZGVidWcoJ0VudHJ5OicgKyBlbnRyeS5mdWxsUGF0
aCArICcgaXNEaXJldG9yeTonICsgZW50cnkuaXNEaXJlY3RvcnkpOworICAgICAgICBzaG91bGRC
ZSgndGVzdEVudHJpZXNbZW50cnkuZnVsbFBhdGhdJywgJ2VudHJ5LmlzRGlyZWN0b3J5Jyk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBlbnRyaWVzQ2FsbGJhY2soZW50cmllcykKK3sKKyAgICBlbnRy
aWVzQ2FsbGJhY2tDb3VudCsrOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxl
bmd0aDsgKytpKQorICAgICAgICByZXN1bHRFbnRyaWVzLnB1c2goZW50cmllc1tpXSk7CisKKyAg
ICBpZiAoZW50cmllcy5sZW5ndGgpIHsKKyAgICAgICAgcmVhZEVudHJpZXNDb3VudCsrOworICAg
ICAgICByZWFkZXIucmVhZEVudHJpZXMoZW50cmllc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBNdXN0IGhhdmUgcmVhZCBhbGwgdGhlIGVudHJpZXMu
CisgICAgICAgIHZlcmlmeVRlc3RSZXN1bHQoKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
K30KKworZnVuY3Rpb24gcnVuUmVhZERpcmVjdG9yeVRlc3QoKQoreworICAgIHJlYWRFbnRyaWVz
Q291bnQrKzsKKyAgICByZWFkZXIgPSBmaWxlU3lzdGVtLnJvb3QuY3JlYXRlUmVhZGVyKCk7Cisg
ICAgcmVhZGVyLnJlYWRFbnRyaWVzKGVudHJpZXNDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7Cit9
CisKK2Z1bmN0aW9uIHByZXBhcmVGb3JUZXN0KCkKK3sKKyAgICB2YXIgam9pbiA9IG5ldyBKb2lu
SGVscGVyKHJ1blJlYWREaXJlY3RvcnlUZXN0KTsKKyAgICB2YXIgZG9uZSA9IGZ1bmN0aW9uKCkg
eyBqb2luLmRvbmUoKTsgfTsKKworICAgIGZvciAodmFyIHBhdGggaW4gdGVzdEVudHJpZXMpIHsK
KyAgICAgICAgdGVzdEVudHJpZXNDb3VudCsrOworICAgICAgICBpZiAodGVzdEVudHJpZXNbcGF0
aF0pCisgICAgICAgICAgICBqb2luLnJ1bihmdW5jdGlvbigpIHsgZmlsZVN5c3RlbS5yb290Lmdl
dERpcmVjdG9yeShwYXRoLCB7Y3JlYXRlOnRydWV9LCBkb25lLCBlcnJvckNhbGxiYWNrKTsgfSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGpvaW4ucnVuKGZ1bmN0aW9uKCkgeyBmaWxlU3lz
dGVtLnJvb3QuZ2V0RmlsZShwYXRoLCB7Y3JlYXRlOnRydWV9LCBkb25lLCBlcnJvckNhbGxiYWNr
KTsgfSk7CisgICAgfQorfQorCitmdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2soZnMpCit7CisgICAg
ZmlsZVN5c3RlbSA9IGZzOworICAgIGRlYnVnKCJTdWNjZXNzZnVsbHkgb2J0YWluZWQgUGVyc2lz
dGVudCBGaWxlU3lzdGVtOiIgKyBmaWxlU3lzdGVtLm5hbWUpOworICAgIHJlbW92ZVJlY3Vyc2l2
ZWx5KGZpbGVTeXN0ZW0ucm9vdCwgcHJlcGFyZUZvclRlc3QsIGVycm9yQ2FsbGJhY2spOworfQor
CitpZiAod2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKSB7CisgICAgcmVxdWVzdEZpbGVTeXN0ZW0o
d2luZG93LlRFTVBPUkFSWSwgMTAwLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwor
ICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKK30gZWxzZQorICAgIGRlYnVnKCJUaGlz
IHRlc3QgcmVxdWlyZXMgRmlsZVN5c3RlbSBBUEkgc3VwcG9ydC4iKTsKKword2luZG93LnN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE2YzdhMmFhYWY5MDIxY2ZhYjhkNWM0N2Q2MjY5NmMzOTli
ZjNhOTkuLjRiYWQzNWU0NmUwZDY4MmMxMmE4MWRiZjk0YmFlZWU5YmE0MjllMDQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTAtMDktMjkgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBEaXJl
Y3RvcnlSZWFkZXIncyBiZWhhdmlvciB0byB0cmlnZ2VyIG9ubHkgb25lIEVudHJpZXNDYWxsYmFj
ayBwZXIgcmVhZEVudHJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ2NTYzCisKKyAgICAgICAgVGVzdDogZmFzdC9maWxlc3lzdGVtL3JlYWQtZGly
ZWN0b3J5Lmh0bWwKKworICAgICAgICAqIGZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpET01GaWxlU3lzdGVtOjpyZWFkRGlyZWN0b3J5KTogQ2hhbmdlZCB0byB0
YWtlIERpcmVjdG9yeVJlYWRlcgorICAgICAgICBhcyBhIHBhcmFtZXRlci4KKyAgICAgICAgKiBm
aWxlYXBpL0RPTUZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUZpbGVTeXN0ZW06
OnNjaGVkdWxlQ2FsbGJhY2spOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0RpcmVjdG9yeVJl
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlSZWFkZXI6OkRpcmVjdG9yeVJl
YWRlcik6IEFkZGVkIGluaXRpYWxpemVyIGZvcgorICAgICAgICBtX2hhc01vcmUgZmxhZy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpcmVjdG9yeVJlYWRlcjo6cmVhZEVudHJpZXMpOiBDaGFuZ2VkIHRv
IHNjaGVkdWxlCisgICAgICAgIEVudHJpZXNDYWxsYmFjayB3aXRoIGFuIGVtcHR5IGFycmF5IGlm
IG1faGFzTW9yZSBmbGFnIGlzIHNldCBmYWxzZS4KKyAgICAgICAgKiBmaWxlYXBpL0RpcmVjdG9y
eVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0b3J5UmVhZGVyOjpmaWxlc3lzdGVt
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3RvcnlSZWFkZXI6OnNldEhhc01vcmUp
OiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RW50cmllc0NhbGxiYWNrczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVudHJpZXNDYWxsYmFja3M6OkVudHJpZXNDYWxsYmFja3MpOiBDaGFuZ2VkIHRvIHRha2UK
KyAgICAgICAgRGlyZWN0b3J5UmVhZGVyIGFzIGEgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29y
ZTo6RW50cmllc0NhbGxiYWNrczo6ZGlkUmVhZERpcmVjdG9yeUVudHJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkVudHJpZXNDYWxsYmFja3M6OmRpZFJlYWREaXJlY3RvcnlFbnRyaWVzKTogQ2hhbmdl
ZCAxKSBub3QgdG8KKyAgICAgICAgdHJpZ2dlciB0aGUgc2Vjb25kIGNhbGxiYWNrIHdoZW4gaGFz
TW9yZSBpcyBmYWxzZSwgYW5kIDIpIHRvIHVwZGF0ZQorICAgICAgICB0aGUgRGlyZWN0b3J5UmVh
ZGVyJ3MgbV9oYXNNb3JlIGZsYWcuCisgICAgICAgICogZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmg6CisKIDIwMTAtMDktMjggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHdpbmRvd3MgYnVpbGQgZml4IGZvciByNjg2MjkuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERpcmVjdG9yeUVudHJ5Q3VzdG9t
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGlyZWN0b3J5RW50cnlDdXN0b20u
Y3BwCmluZGV4IGZjOGNmOThmNTc2NWQ2MjA4ZGVlYmQzMjhkNTUwYWIzNDMyOWYxZjUuLmE0NDEz
MWFhMGZiOWIwZjE2ZmY0NjEwNWM0YTBlMWUzZDBkYWQyYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RGlyZWN0b3J5RW50cnlDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGlyZWN0b3J5RW50cnlDdXN0b20uY3BwCkBAIC03MCw4
ICs3MCw4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERpcmVjdG9yeUVudHJ5OjpnZXREaXJl
Y3RvcnlDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzCiAgICAgICAgICAgICBmbGFncy0+c2V0
RXhjbHVzaXZlKGlzRXhjbHVzaXZlKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
RVhDRVBUSU9OX0JMT0NLKEZsYWdzKiwgdG1wX2ZsYWdzLCBWOEZsYWdzOjpIYXNJbnN0YW5jZShh
cmdzWzFdKSA/IFY4RmxhZ3M6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
YXJnc1sxXSkpIDogMCk7Ci0gICAgICAgZmxhZ3MgPSB0bXBfZmxhZ3M7CisgICAgICAgIEVYQ0VQ
VElPTl9CTE9DSyhGbGFncyosIHRtcF9mbGFncywgVjhGbGFnczo6SGFzSW5zdGFuY2UoYXJnc1sx
XSkgPyBWOEZsYWdzOjp0b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3Nb
MV0pKSA6IDApOworICAgICAgICBmbGFncyA9IHRtcF9mbGFnczsKICAgICB9CiAgICAgUmVmUHRy
PEVudHJ5Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjazsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+
IDIgJiYgIWFyZ3NbMl0tPklzTnVsbCgpICYmICFhcmdzWzJdLT5Jc1VuZGVmaW5lZCgpKSB7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAgYi9XZWJDb3JlL2Zp
bGVhcGkvRE9NRmlsZVN5c3RlbS5jcHAKaW5kZXggMmJkMDljMmYwZGVjZjdiNTBmZmJkODQzYjYw
NGVhMTFiNDk1ZDRkYS4uYjFiMWNkYzExZTZkZTUzYTFlODViZWJlM2M1NmIzZmVlOGQ0NDBkZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uY3BwCisrKyBiL1dlYkNv
cmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmNwcApAQCAtMjE0LDExICsyMTQsMTEgQEAgdm9pZCBE
T01GaWxlU3lzdGVtOjpjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlLCBQYXNzUmVm
UHRyPEZpbGVXcml0ZXJDYWwKICAgICBtX2FzeW5jRmlsZVN5c3RlbS0+Y3JlYXRlV3JpdGVyKGZp
bGVXcml0ZXIuZ2V0KCksIHBsYXRmb3JtUGF0aCwgY2FsbGJhY2tzLnJlbGVhc2UoKSk7CiB9CiAK
LXZvaWQgRE9NRmlsZVN5c3RlbTo6cmVhZERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFBh
c3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaykKK3ZvaWQgRE9NRmlsZVN5c3RlbTo6cmVhZERpcmVj
dG9yeShEaXJlY3RvcnlSZWFkZXIqIHJlYWRlciwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVm
UHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKERPTUZpbGVQYXRoOjppc0Fic29s
dXRlKHBhdGgpKTsKICAgICBTdHJpbmcgcGxhdGZvcm1QYXRoID0gbV9hc3luY0ZpbGVTeXN0ZW0t
PnZpcnR1YWxUb1BsYXRmb3JtUGF0aChwYXRoKTsKLSAgICBtX2FzeW5jRmlsZVN5c3RlbS0+cmVh
ZERpcmVjdG9yeShwbGF0Zm9ybVBhdGgsIEVudHJpZXNDYWxsYmFja3M6OmNyZWF0ZShzdWNjZXNz
Q2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHRoaXMsIHBhdGgpKTsKKyAgICBtX2FzeW5jRmlsZVN5
c3RlbS0+cmVhZERpcmVjdG9yeShwbGF0Zm9ybVBhdGgsIEVudHJpZXNDYWxsYmFja3M6OmNyZWF0
ZShzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHJlYWRlciwgcGF0aCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0u
aCBiL1dlYkNvcmUvZmlsZWFwaS9ET01GaWxlU3lzdGVtLmgKaW5kZXggODgxZmZjNTkzOTI0OTA2
ZGJjYTVjOGNkOTMyZjYyY2Q1YjhhYTAxZC4uODQ5OGU3NWI1ZjQ0NmUzZWZlOWI3OGQ2ODI3ZWQz
MmZhY2Q0ZWY3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0RPTUZpbGVTeXN0ZW0uaAor
KysgYi9XZWJDb3JlL2ZpbGVhcGkvRE9NRmlsZVN5c3RlbS5oCkBAIC00NCw2ICs0NCw3IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERpcmVjdG9yeUVudHJ5OworY2xhc3MgRGlyZWN0
b3J5UmVhZGVyOwogY2xhc3MgRW50cnk7CiBjbGFzcyBFbnRyeUNhbGxiYWNrOwogY2xhc3MgRW50
cmllc0NhbGxiYWNrOwpAQCAtNzgsMTMgKzc5LDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFBh
cmVudChjb25zdCBFbnRyeSogZW50cnksIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogICAgIHZvaWQgZ2V0RmlsZShjb25zdCBFbnRyeSogYmFz
ZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPEZsYWdzPiwgUGFzc1JlZlB0cjxFbnRy
eUNhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CiAgICAgdm9pZCBnZXREaXJl
Y3RvcnkoY29uc3QgRW50cnkqIGJhc2UsIGNvbnN0IFN0cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxG
bGFncz4sIFBhc3NSZWZQdHI8RW50cnlDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4pOwotICAgIHZvaWQgcmVhZERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIFBhc3NSZWZQ
dHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPik7CisgICAgdm9p
ZCByZWFkRGlyZWN0b3J5KERpcmVjdG9yeVJlYWRlciogcmVhZGVyLCBjb25zdCBTdHJpbmcmIHBh
dGgsIFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNr
Pik7CiAgICAgdm9pZCBjcmVhdGVXcml0ZXIoY29uc3QgRmlsZUVudHJ5KiBmaWxlLCBQYXNzUmVm
UHRyPEZpbGVXcml0ZXJDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4pOwogCiAg
ICAgLy8gU2NoZWR1bGUgYSBjYWxsYmFjay4gVGhpcyBzaG91bGQgbm90IGNyb3NzIHRocmVhZHMg
KHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHNhbWUgY29udGV4dCB0aHJlYWQpLgorICAgIC8vIEZJ
WE1FOiBtb3ZlIHRoaXMgdG8gYSBtb3JlIGdlbmVyaWMgcGxhY2UuCiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KICAgICBzdGF0aWMgdm9pZCBzY2hlZHVsZUNhbGxi
YWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPENCPiwgUGFzc1JlZlB0cjxD
QkFyZz4pOwogCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENCLCB0eXBlbmFtZSBDQkFyZz4KKyAg
ICB2b2lkIHNjaGVkdWxlQ2FsbGJhY2soUGFzc1JlZlB0cjxDQj4gY2FsbGJhY2ssIFBhc3NSZWZQ
dHI8Q0JBcmc+IGNhbGxiYWNrQXJnKQorICAgIHsKKyAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNhbGxiYWNrLCBjYWxsYmFja0FyZyk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIERPTUZpbGVTeXN0ZW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgUGFzc093blB0cjxBc3luY0ZpbGVTeXN0ZW0+KTsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeVJlYWRlci5jcHAgYi9XZWJDb3JlL2ZpbGVh
cGkvRGlyZWN0b3J5UmVhZGVyLmNwcAppbmRleCBiMGVlZjFjYzQ5Mjc2ZjMzYzc5NDBlNjY5MmNh
MmY1ZDYwMGYwNTE1Li4wOTJmOTc2NDM4NDJiZDE2ZjUzNmU0NjE3NTNlM2E3OGY4NTdmMTMyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcAorKysgYi9XZWJD
b3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmNwcApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5j
bHVkZSAiRE9NRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkVudHJpZXNDYWxsYmFjay5oIgorI2lu
Y2x1ZGUgIkVudHJ5QXJyYXkuaCIKICNpbmNsdWRlICJFcnJvckNhbGxiYWNrLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTQyLDEyICs0MywxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBE
aXJlY3RvcnlSZWFkZXI6OkRpcmVjdG9yeVJlYWRlcihQYXNzUmVmUHRyPERPTUZpbGVTeXN0ZW0+
IGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgZnVsbFBhdGgpCiAgICAgOiBtX2ZpbGVTeXN0ZW0o
ZmlsZVN5c3RlbSkKICAgICAsIG1fZnVsbFBhdGgoZnVsbFBhdGgpCisgICAgLCBtX2hhc01vcmUo
dHJ1ZSkKIHsKIH0KIAogdm9pZCBEaXJlY3RvcnlSZWFkZXI6OnJlYWRFbnRyaWVzKFBhc3NSZWZQ
dHI8RW50cmllc0NhbGxiYWNrPiBlbnRyaWVzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaykKIHsKLSAgICBtX2ZpbGVTeXN0ZW0tPnJlYWREaXJlY3Rvcnko
bV9mdWxsUGF0aCwgZW50cmllc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTsKKyAgICBpZiAoIW1f
aGFzTW9yZSkgeworICAgICAgICBtX2ZpbGVTeXN0ZW0tPnNjaGVkdWxlQ2FsbGJhY2soZW50cmll
c0NhbGxiYWNrLCBFbnRyeUFycmF5OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9maWxlU3lzdGVtLT5yZWFkRGlyZWN0b3J5KHRoaXMsIG1fZnVsbFBhdGgsIGVudHJp
ZXNDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2ZpbGVhcGkvRGlyZWN0b3J5UmVhZGVyLmggYi9XZWJDb3JlL2ZpbGVhcGkv
RGlyZWN0b3J5UmVhZGVyLmgKaW5kZXggMGUyZWYwZjZjZDIyOWNkZDRkOTU3ZTFlZjViMjc0YTU4
YzYzOTFkMC4uYTg1ZTFlZTliM2E0MTZiZTM5NDE1MGFjYWZlZjExOWUwYmZlNWJjNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9maWxlYXBpL0RpcmVjdG9yeVJlYWRlci5oCisrKyBiL1dlYkNvcmUvZmls
ZWFwaS9EaXJlY3RvcnlSZWFkZXIuaApAQCAtNDIsNiArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEVudHJpZXNDYWxsYmFjazsKIGNsYXNzIEVycm9yQ2FsbGJhY2s7CitjbGFz
cyBFbnRyaWVzQ2FsbGJhY2tzOwogCiBjbGFzcyBEaXJlY3RvcnlSZWFkZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxEaXJlY3RvcnlSZWFkZXI+IHsKIHB1YmxpYzoKQEAgLTUwLDEzICs1MSwxNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGlyZWN0b3J5UmVhZGVyKGZpbGVT
eXN0ZW0sIHBhdGgpKTsKICAgICB9CiAKLSAgICB2b2lkIHJlYWRFbnRyaWVzKFBhc3NSZWZQdHI8
RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjayA9IDApOworICAgIERPTUZpbGVTeXN0ZW0qIGZpbGVzeXN0ZW0oKSBj
b25zdCB7IHJldHVybiBtX2ZpbGVTeXN0ZW0uZ2V0KCk7IH0KKyAgICB2b2lkIHJlYWRFbnRyaWVz
KFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiA9
IDApOworICAgIHZvaWQgc2V0SGFzTW9yZShib29sIGhhc01vcmUpIHsgbV9oYXNNb3JlID0gaGFz
TW9yZTsgfQogCiBwcml2YXRlOgogICAgIERpcmVjdG9yeVJlYWRlcihQYXNzUmVmUHRyPERPTUZp
bGVTeXN0ZW0+IGZpbGVTeXN0ZW0sIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKICAgICBSZWZQdHI8
RE9NRmlsZVN5c3RlbT4gbV9maWxlU3lzdGVtOwogICAgIFN0cmluZyBtX2Z1bGxQYXRoOworICAg
IGJvb2wgbV9oYXNNb3JlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxl
U3lzdGVtQ2FsbGJhY2tzLmNwcAppbmRleCA1NTBiNTA5YjRiOTUzYjk0NjQ5YjBiZGEzNjQ3MjBk
MDk5ZTM1NmE3Li44NzUzMjkxNmM5ZTI3YjQzYzNhY2QwZTU3OWM1YWFhMzczMzYxODY4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAKKysrIGIvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiRE9NRmlsZVBhdGguaCIKICNpbmNsdWRlICJET01GaWxlU3lzdGVtLmgiCiAjaW5j
bHVkZSAiRGlyZWN0b3J5RW50cnkuaCIKKyNpbmNsdWRlICJEaXJlY3RvcnlSZWFkZXIuaCIKICNp
bmNsdWRlICJFbnRyaWVzQ2FsbGJhY2suaCIKICNpbmNsdWRlICJFbnRyeUFycmF5LmgiCiAjaW5j
bHVkZSAiRW50cnlDYWxsYmFjay5oIgpAQCAtMTM3LDM4ICsxMzgsMzQgQEAgdm9pZCBFbnRyeUNh
bGxiYWNrczo6ZGlkU3VjY2VlZCgpCiAKIC8vIEVudHJpZXNDYWxsYmFja3MgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUGFzc093
blB0cjxFbnRyaWVzQ2FsbGJhY2tzPiBFbnRyaWVzQ2FsbGJhY2tzOjpjcmVhdGUoUGFzc1JlZlB0
cjxFbnRyaWVzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxFcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLCBET01GaWxlU3lzdGVtKiBmaWxlU3lzdGVtLCBjb25zdCBTdHJp
bmcmIGJhc2VQYXRoKQorUGFzc093blB0cjxFbnRyaWVzQ2FsbGJhY2tzPiBFbnRyaWVzQ2FsbGJh
Y2tzOjpjcmVhdGUoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywg
UGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBEaXJlY3RvcnlSZWFkZXIq
IGRpcmVjdG9yeVJlYWRlciwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCkKIHsKLSAgICByZXR1cm4g
YWRvcHRQdHIobmV3IEVudHJpZXNDYWxsYmFja3Moc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxi
YWNrLCBmaWxlU3lzdGVtLCBiYXNlUGF0aCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRW50
cmllc0NhbGxiYWNrcyhzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGRpcmVjdG9yeVJl
YWRlciwgYmFzZVBhdGgpKTsKIH0KIAotRW50cmllc0NhbGxiYWNrczo6RW50cmllc0NhbGxiYWNr
cyhQYXNzUmVmUHRyPEVudHJpZXNDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIERPTUZpbGVTeXN0ZW0qIGZpbGVTeXN0ZW0s
IGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpCitFbnRyaWVzQ2FsbGJhY2tzOjpFbnRyaWVzQ2FsbGJh
Y2tzKFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQ
dHI8RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgRGlyZWN0b3J5UmVhZGVyKiBkaXJlY3Rv
cnlSZWFkZXIsIGNvbnN0IFN0cmluZyYgYmFzZVBhdGgpCiAgICAgOiBGaWxlU3lzdGVtQ2FsbGJh
Y2tzQmFzZShlcnJvckNhbGxiYWNrKQogICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0Nh
bGxiYWNrKQotICAgICwgbV9maWxlU3lzdGVtKGZpbGVTeXN0ZW0pCisgICAgLCBtX2RpcmVjdG9y
eVJlYWRlcihkaXJlY3RvcnlSZWFkZXIpCiAgICAgLCBtX2Jhc2VQYXRoKGJhc2VQYXRoKQogICAg
ICwgbV9lbnRyaWVzKEVudHJ5QXJyYXk6OmNyZWF0ZSgpKQogeworICAgIEFTU0VSVChtX2RpcmVj
dG9yeVJlYWRlcik7CiB9CiAKIHZvaWQgRW50cmllc0NhbGxiYWNrczo6ZGlkUmVhZERpcmVjdG9y
eUVudHJ5KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBpc0RpcmVjdG9yeSkKIHsKICAgICBpZiAo
aXNEaXJlY3RvcnkpCi0gICAgICAgIG1fZW50cmllcy0+YXBwZW5kKERpcmVjdG9yeUVudHJ5Ojpj
cmVhdGUobV9maWxlU3lzdGVtLCBET01GaWxlUGF0aDo6YXBwZW5kKG1fYmFzZVBhdGgsIG5hbWUp
KSk7CisgICAgICAgIG1fZW50cmllcy0+YXBwZW5kKERpcmVjdG9yeUVudHJ5OjpjcmVhdGUobV9k
aXJlY3RvcnlSZWFkZXItPmZpbGVzeXN0ZW0oKSwgRE9NRmlsZVBhdGg6OmFwcGVuZChtX2Jhc2VQ
YXRoLCBuYW1lKSkpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbnRyaWVzLT5hcHBlbmQoRmlsZUVu
dHJ5OjpjcmVhdGUobV9maWxlU3lzdGVtLCBET01GaWxlUGF0aDo6YXBwZW5kKG1fYmFzZVBhdGgs
IG5hbWUpKSk7CisgICAgICAgIG1fZW50cmllcy0+YXBwZW5kKEZpbGVFbnRyeTo6Y3JlYXRlKG1f
ZGlyZWN0b3J5UmVhZGVyLT5maWxlc3lzdGVtKCksIERPTUZpbGVQYXRoOjphcHBlbmQobV9iYXNl
UGF0aCwgbmFtZSkpKTsKIH0KIAogdm9pZCBFbnRyaWVzQ2FsbGJhY2tzOjpkaWRSZWFkRGlyZWN0
b3J5RW50cmllcyhib29sIGhhc01vcmUpCiB7CiAgICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNrKSB7
CisgICAgICAgIG1fZGlyZWN0b3J5UmVhZGVyLT5zZXRIYXNNb3JlKGhhc01vcmUpOwogICAgICAg
ICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQobV9lbnRyaWVzLmdldCgpKTsKLSAgICAg
ICAgaWYgKCFtX2VudHJpZXMtPmlzRW1wdHkoKSAmJiAhaGFzTW9yZSkgewotICAgICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSByZXR1cm5lZCBzb21lIGVudHJpZXMgYW5kIHRoZXJlJ3JlIG5vIG1vcmUg
Y29taW5nIGVudHJpZXMgKGhhc01vcmU9PWZhbHNlKSwgY2FsbCBiYWNrIG9uY2UgbW9yZSB3aXRo
IGFuIGVtcHR5IGFycmF5LgotICAgICAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KEVudHJ5QXJyYXk6OmNyZWF0ZSgpLmdldCgpKTsKLSAgICAgICAgICAgIG1fc3VjY2Vzc0Nh
bGxiYWNrLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9lbnRyaWVzLT5jbGVhcigpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0ZW1DYWxsYmFj
a3MuaCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgKaW5kZXggMzY0N2Fk
MzE5YjY3ODY0NjYyZTlkOGRmNjNiOWViNDk3NGFlYTE1NC4uN2YxODZlZjI3NTRhZTU2MjY1MmMx
ZjRmZGNmMTYwNmMzMjM1ZDRiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVTeXN0
ZW1DYWxsYmFja3MuaAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5o
CkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXN5bmNGaWxl
V3JpdGVyOwogY2xhc3MgRE9NRmlsZVN5c3RlbTsKK2NsYXNzIERpcmVjdG9yeVJlYWRlcjsKIGNs
YXNzIEVycm9yQ2FsbGJhY2s7CiBjbGFzcyBFbnRyaWVzQ2FsbGJhY2s7CiBjbGFzcyBFbnRyeUFy
cmF5OwpAQCAtOTgsMTQgKzk5LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIEVudHJpZXNDYWxsYmFj
a3MgOiBwdWJsaWMgRmlsZVN5c3RlbUNhbGxiYWNrc0Jhc2UgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzT3duUHRyPEVudHJpZXNDYWxsYmFja3M+IGNyZWF0ZShQYXNzUmVmUHRyPEVudHJpZXND
YWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4sIERPTUZpbGVTeXN0ZW0qLCBjb25z
dCBTdHJpbmcmIGJhc2VQYXRoKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxFbnRyaWVzQ2FsbGJh
Y2tzPiBjcmVhdGUoUGFzc1JlZlB0cjxFbnRyaWVzQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPEVycm9y
Q2FsbGJhY2s+LCBEaXJlY3RvcnlSZWFkZXIqLCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVhZERpcmVjdG9yeUVudHJ5KGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0RpcmVjdG9yeSk7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlYWREaXJlY3RvcnlFbnRy
aWVzKGJvb2wgaGFzTW9yZSk7CiAKIHByaXZhdGU6Ci0gICAgRW50cmllc0NhbGxiYWNrcyhQYXNz
UmVmUHRyPEVudHJpZXNDYWxsYmFjaz4sIFBhc3NSZWZQdHI8RXJyb3JDYWxsYmFjaz4sIERPTUZp
bGVTeXN0ZW0qLCBjb25zdCBTdHJpbmcmIGJhc2VQYXRoKTsKKyAgICBFbnRyaWVzQ2FsbGJhY2tz
KFBhc3NSZWZQdHI8RW50cmllc0NhbGxiYWNrPiwgUGFzc1JlZlB0cjxFcnJvckNhbGxiYWNrPiwg
RGlyZWN0b3J5UmVhZGVyKiwgY29uc3QgU3RyaW5nJiBiYXNlUGF0aCk7CiAgICAgUmVmUHRyPEVu
dHJpZXNDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Ci0gICAgRE9NRmlsZVN5c3RlbSogbV9m
aWxlU3lzdGVtOworICAgIERpcmVjdG9yeVJlYWRlciogbV9kaXJlY3RvcnlSZWFkZXI7CiAgICAg
U3RyaW5nIG1fYmFzZVBhdGg7CiAgICAgUmVmUHRyPEVudHJ5QXJyYXk+IG1fZW50cmllczsKIH07
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBhMjg1MTdhZmIwNTFjYTVmODBkNzk5NzFkYTM3MjM1YWY2NTYyN2Ix
Li4wZjc5YmMzNzI4OTEwMmM5YWI3MGQ3MDkyMTRmY2M4Y2M1OWQzMzA0IDEwMDY0NAotLS0gYS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMC0wOS0yOSAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgRml4IERpcmVjdG9yeVJlYWRlcidzIGJlaGF2aW9yIHRvIHRyaWdnZXIgb25seSBvbmUgRW50
cmllc0NhbGxiYWNrIHBlciByZWFkRW50cmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY1NjMKKworICAgICAgICAqIHNyYy9XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZpbGVTeXN0ZW1DYWxsYmFj
a3NJbXBsOjpkaWRSZWFkRGlyZWN0b3J5KToKKwogMjAxMC0wOS0yOCAgVmFuZ2VsaXMgS29ra2V2
aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0
aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGaWxlU3lzdGVt
Q2FsbGJhY2tzSW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxs
YmFja3NJbXBsLmNwcAppbmRleCBhMjNhZGQ3YmZlMTA2MzExOTU1ZmFhMWQ4N2M1ZmI4NTVlMWQ0
M2MyLi5mMjY0OTE0NGM0NGFmZGI5ZDIwZjM4OTljMzQyOGJhODBlNjFlYzRhIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcApAQCAt
NzAsMTEgKzcwLDEzIEBAIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxiYWNrc0ltcGw6OmRpZFJlYWRN
ZXRhZGF0YShjb25zdCBXZWJGaWxlSW5mbyYgaW5mbykKIHZvaWQgV2ViRmlsZVN5c3RlbUNhbGxi
YWNrc0ltcGw6OmRpZFJlYWREaXJlY3RvcnkoY29uc3QgV2ViVmVjdG9yPFdlYkZpbGVTeXN0ZW1F
bnRyeT4mIGVudHJpZXMsIGJvb2wgaGFzTW9yZSkKIHsKICAgICBBU1NFUlQobV9jYWxsYmFja3Mp
OworICAgIC8vIEZJWE1FOiBDdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIHN1cHBvcnQg
Y2h1bmsgcmVhZGluZy4KKyAgICAvLyBSZW1vdmUgdGhpcyBBU1NFUlQgd2hlbiB3ZSBzdXBwb3J0
IGNodW5rIHJlYWRpbmcuCisgICAgQVNTRVJUKCFoYXNNb3JlKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fY2FsbGJhY2tzLT5kaWRS
ZWFkRGlyZWN0b3J5RW50cnkoZW50cmllc1tpXS5uYW1lLCBlbnRyaWVzW2ldLmlzRGlyZWN0b3J5
KTsKICAgICBtX2NhbGxiYWNrcy0+ZGlkUmVhZERpcmVjdG9yeUVudHJpZXMoaGFzTW9yZSk7Ci0g
ICAgaWYgKCFoYXNNb3JlKQotICAgICAgICBkZWxldGUgdGhpczsKKyAgICBkZWxldGUgdGhpczsK
IH0KIAogdm9pZCBXZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbDo6ZGlkT3BlbkZpbGVTeXN0ZW0o
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJTdHJpbmcmIHBhdGgpCg==
</data>
<flag name="review"
          id="58868"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>