<?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>29536</bug_id>
          
          <creation_ts>2009-09-21 00:52:01 -0700</creation_ts>
          <short_desc>WebInspector: Migrate DOM storage inspection to serialized interaction</short_desc>
          <delta_ts>2009-09-22 23:04:56 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Semikhatsky">yurys</reporter>
          <assigned_to name="Yury Semikhatsky">yurys</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>pfeldman</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>148609</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-21 00:52:01 -0700</bug_when>
    <thetext>This is next step in migrating Storage Panel to serialized interaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148610</commentid>
    <comment_count>1</comment_count>
      <attachid>39842</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-21 00:53:46 -0700</bug_when>
    <thetext>Created attachment 39842
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148983</commentid>
    <comment_count>2</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-22 01:34:03 -0700</bug_when>
    <thetext>This looks good to me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149074</commentid>
    <comment_count>3</comment_count>
      <attachid>39842</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-09-22 09:51:00 -0700</bug_when>
    <thetext>Comment on attachment 39842
patch

&gt; +    if (storageResourceId) {
&gt; +        m_frontend-&gt;selectDOMStorage(storageResourceId);
&gt; +    }

No need for braces.


&gt; +    for (DOMStorageResourcesSet::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it) {
&gt; +        if ((*it)-&gt;id() == storageId) {
&gt; +            return it-&gt;get();
&gt; +        }
&gt; +    }

Ditto.


&gt; +    if (isSameHostAndType(storage-&gt;frame(), isLocalStorage)) {
&gt; +        m_frontend-&gt;updateDOMStorage(m_id);
&gt; +    }

Ditto.


&gt; +            return listener-&gt;type() == InspectorDOMStorageResourceType
&gt; +            ? static_cast&lt;const InspectorDOMStorageResource*&gt;(listener)
&gt; +            : 0;

Just put put on one line.


&gt; +    getEntriesAsync: function(callback)
&gt; +    setItemAsync: function(key, value, callback)
&gt; +    removeItemAsync: function(key, callback)

I am not sure &quot;Async&quot; is needed for these, since they take a callback, it is implied. All the other async calls Pavel has added don&apos;t have that suffix.


&gt; +        if (columnIdentifier == 0) {
&gt; +            if (this._keys.indexOf(newText) != -1) {

Would be good to use === or !==.


&gt; +        for (var index = 0; index &lt; entries.length; index++) {

Just use &quot;i&quot; instead of index and ++i.


&gt; +            if (domStorage.id == storageId) {
&gt; +                return domStorage;
&gt;              }

No need for braces.


Otherwise will be r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149142</commentid>
    <comment_count>4</comment_count>
      <attachid>39936</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-22 12:17:16 -0700</bug_when>
    <thetext>Created attachment 39936
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149144</commentid>
    <comment_count>5</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2009-09-22 12:19:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 39842 [details])
&gt; &gt; +    if (storageResourceId) {
&gt; &gt; +        m_frontend-&gt;selectDOMStorage(storageResourceId);
&gt; &gt; +    }
&gt; 
&gt; No need for braces.
&gt; 
Done.

&gt; 
&gt; &gt; +    for (DOMStorageResourcesSet::iterator it = m_domStorageResources.begin(); it != domStorageEnd; ++it) {
&gt; &gt; +        if ((*it)-&gt;id() == storageId) {
&gt; &gt; +            return it-&gt;get();
&gt; &gt; +        }
&gt; &gt; +    }
&gt; 
&gt; Ditto.
&gt; 
Done.

&gt; 
&gt; &gt; +    if (isSameHostAndType(storage-&gt;frame(), isLocalStorage)) {
&gt; &gt; +        m_frontend-&gt;updateDOMStorage(m_id);
&gt; &gt; +    }
&gt; 
&gt; Ditto.
&gt; 
Done.

&gt; 
&gt; &gt; +            return listener-&gt;type() == InspectorDOMStorageResourceType
&gt; &gt; +            ? static_cast&lt;const InspectorDOMStorageResource*&gt;(listener)
&gt; &gt; +            : 0;
&gt; 
&gt; Just put put on one line.
&gt; 
Done.

&gt; 
&gt; &gt; +    getEntriesAsync: function(callback)
&gt; &gt; +    setItemAsync: function(key, value, callback)
&gt; &gt; +    removeItemAsync: function(key, callback)
&gt; 
&gt; I am not sure &quot;Async&quot; is needed for these, since they take a callback, it is
&gt; implied. All the other async calls Pavel has added don&apos;t have that suffix.
&gt; 
Removed Async suffixes.

&gt; 
&gt; &gt; +        if (columnIdentifier == 0) {
&gt; &gt; +            if (this._keys.indexOf(newText) != -1) {
&gt; 
&gt; Would be good to use === or !==.
&gt; 
Done.

&gt; 
&gt; &gt; +        for (var index = 0; index &lt; entries.length; index++) {
&gt; 
&gt; Just use &quot;i&quot; instead of index and ++i.
&gt; 
Done. It was called index in the original code.

&gt; 
&gt; &gt; +            if (domStorage.id == storageId) {
&gt; &gt; +                return domStorage;
&gt; &gt;              }
&gt; 
&gt; No need for braces.
&gt; 
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149243</commentid>
    <comment_count>6</comment_count>
      <attachid>39936</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 16:03:00 -0700</bug_when>
    <thetext>Comment on attachment 39936
patch

Rejecting patch 39936 from commit-queue.

Failed to run &quot;[&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;]&quot; exit_code: 1
Running build-dumprendertree
Running tests from /Users/eseidel/Projects/CommitQueue/LayoutTests
Testing 11312 test cases.

httpd is already running: pid 37053, killing...
http/tests/loading/basic-credentials-sent-automatically.html -&gt; failed

Exiting early after 1 failures. 8433 tests run.
209.08s total testing time

8432 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
4 test cases (&lt;1%) had stderr output</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149248</commentid>
    <comment_count>7</comment_count>
      <attachid>39936</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-22 16:14:36 -0700</bug_when>
    <thetext>Comment on attachment 39936
patch

Flakey test.  bug 29505.  Adding back to the commit-queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149276</commentid>
    <comment_count>8</comment_count>
      <attachid>39936</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 17:09:18 -0700</bug_when>
    <thetext>Comment on attachment 39936
patch

Clearing flags on attachment: 39936

Committed r48659: &lt;http://trac.webkit.org/changeset/48659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149277</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-22 17:09:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149290</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-22 17:32:32 -0700</bug_when>
    <thetext>This was a two-sided patch for Chromium. Yury, Pavel, please make sure to note this in the future. It&apos;s very hard for the webkit gardeners to keep up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149308</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-22 19:57:00 -0700</bug_when>
    <thetext>Chromium build fixes landed as http://trac.webkit.org/changeset/48665 and http://trac.webkit.org/changeset/48663. Come on guys.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149319</commentid>
    <comment_count>12</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2009-09-22 23:04:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; This was a two-sided patch for Chromium. Yury, Pavel, please make sure to note
&gt; this in the future. It&apos;s very hard for the webkit gardeners to keep up.

Sorry about that. It was not supposed to be two-sided, just the import bustage. Won&apos;t happen again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39842</attachid>
            <date>2009-09-21 00:53:46 -0700</date>
            <delta_ts>2009-09-22 12:17:16 -0700</delta_ts>
            <desc>patch</desc>
            <filename>serialize-domstorage-access2.patch</filename>
            <type>text/plain</type>
            <size>37240</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWUyNTMwNC4uZjJiMDgwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAwOS0wOS0xOCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBNaWdyYXRlIERhdGFiYXNlcyB0YWIg
dG8gSW5qZWN0ZWRTY3JpcHQgLworICAgICAgICBzZXJpYWxpemVkIGludGVyYWN0aW9uLgorCisg
ICAgICAgIERPTVN0b3JhZ2UgaW50ZXJhY3Rpb24gaXMgbm93IHNlcmlhbGl6ZWQgaW50byBKU09O
IG1lc3NhZ2VzCisgICAgICAgIGFuZCBkb2Vzbid0IHJlcXVpcmUgcXVhcmFudGluZWQgb2JqZWN0
cy4KKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yODg3MworCisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50TGlzdGVuZXI6Oik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2VsZWN0RE9N
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRET01TdG9y
YWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZXRET01T
dG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVE
T01TdG9yYWdlSXRlbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZWxlY3RET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpi
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6dW5i
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6c3Rh
cnRSZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlOjpkb21TdG9yYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OmRpZEdldERPTVN0b3JhZ2VFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjpkaWRTZXRET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZDo6ZGlkUmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9N
U3RvcmFnZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5nZXQgaWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLmdldCBkb21TdG9yYWdlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5nZXQgaXNMb2NhbFN0b3JhZ2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLmdldEVudHJpZXNBc3lu
Yyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbUFz
eW5jKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJ
dGVtQXN5bmMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZURhdGFH
cmlkLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZS5fc3RhcnRFZGl0
aW5nQ29sdW1uT2ZEYXRhR3JpZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3Jh
Z2VEYXRhR3JpZC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZS5fZWRpdGluZ0NvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZS5fZWRpdGluZ0Nh
bmNlbGxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3Rv
dHlwZS5kZWxldGVTZWxlY3RlZFJvdyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlSXRlbXNWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJ
dGVtc1ZpZXcucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3Rv
cmFnZUl0ZW1zVmlldy5wcm90b3R5cGUuX3Nob3dET01TdG9yYWdlRW50cmllcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUl0ZW1zVmlldy5wcm90b3R5cGUuX2RhdGFHcmlkRm9y
RE9NU3RvcmFnZUVudHJpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3RvcmFn
ZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5wcm90b3R5cGUu
c2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZS5yZXNl
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZS5zZWxlY3RE
T01TdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwucHJvdG90eXBl
LnVwZGF0ZURPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5w
cm90b3R5cGUuX2RvbVN0b3JhZ2VGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuYWRkRE9NU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRE9NU3RvcmFnZSk6CisKIDIwMDktMDktMTcgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQ
ZXRlcnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaCBiL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXIuaAppbmRleCA1MDFjNjFkLi43ZDNhYzk4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lci5oCkBAIC0zNyw3ICszNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIGVudW0gVHlwZSB7IEpTRXZlbnRMaXN0ZW5lclR5cGUsIAogICAgICAgICAgICAg
ICAgICAgICBJbWFnZUV2ZW50TGlzdGVuZXJUeXBlLCAKLSAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yRE9NQWdlbnRUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yRE9NQWdl
bnRUeXBlLAorICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2VU
eXBlLAogICAgICAgICAgICAgICAgICAgICBPYmpDRXZlbnRMaXN0ZW5lclR5cGUsIAogICAgICAg
ICAgICAgICAgICAgICBDb25kaXRpb25FdmVudExpc3RlbmVyVHlwZSB9OwogICAgICAgICAgICAg
ICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggMjUwMzRm
YS4uYzE0MGIxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTUw
Miw4ICs1MDIsMjYgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZWxlY3REYXRhYmFzZShEYXRh
YmFzZSogZGF0YWJhc2UpCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgaWYgKElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5kKCkpCi0gICAgICAg
IGZyb250ZW5kLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOworICAgIGlmIChtX2luc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2VsZWN0RE9NU3Rv
cmFnZShzdG9yYWdlKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRET01TdG9yYWdl
RW50cmllcyhsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQpCit7CisgICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5nZXRET01TdG9y
YWdlRW50cmllcyhjYWxsSWQsIHN0b3JhZ2VJZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6c2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldERPTVN0b3JhZ2VJ
dGVtKGNhbGxJZCwgc3RvcmFnZUlkLCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQs
IGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisg
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oY2FsbElk
LCBzdG9yYWdlSWQsIGtleSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCmluZGV4IDIyYjQ2YmYuLjAzOGFlMTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmgKQEAgLTE1MSw2ICsxNTEsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiAgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2Up
OworICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFn
ZUlkKTsKKyAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQg
cmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5pZGwKaW5kZXggNDU0MDAwMS4uMzk1ZTdmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5pZGwKQEAgLTEyMSw2ICsxMjEsOSBAQCBtb2R1bGUgY29yZSB7CiAjZW5k
aWYKICNpZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5BQkxFX0RPTV9TVE9SQUdF
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbiBET01PYmplY3Qgc3Rv
cmFnZSk7CisgICAgICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMoaW4gbG9uZyBjYWxsSWQs
IGluIGxvbmcgc3RvcmFnZUlkKTsKKyAgICAgICAgdm9pZCBzZXRET01TdG9yYWdlSXRlbShpbiBs
b25nIGNhbGxJZCwgaW4gbG9uZyBzdG9yYWdlSWQsIGluIERPTVN0cmluZyBrZXksIGluIERPTVN0
cmluZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oaW4gbG9uZyBj
YWxsSWQsIGluIGxvbmcgc3RvcmFnZUlkLCBpbiBET01TdHJpbmcga2V5KTsKICNlbmRpZgogICAg
IH07CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM2
OWMzMjQuLmE0Yjc4MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCkBAIC03MzEsNiArNzMxLDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21t
aXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fY3VycmVudFVzZXJJbml0
aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKICAgICAgICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2Zp
bGVOdW1iZXIgPSAxOwogI2VuZGlmCisgICAgICAgIC8vIHJlc2V0U2NyaXB0T2JqZWN0cyBzaG91
bGQgYmUgY2FsbGVkIGJlZm9yZSBkYXRhYmFzZSBhbmQgRE9NIHN0b3JhZ2UKKyAgICAgICAgLy8g
cmVzb3VyY2VzIGFyZSBjbGVhcmVkIHNvIHRoYXQgaXQgaGFzIGEgY2hhbmNlIHRvIHVuYmluZCB0
aGVtLgorICAgICAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKICNpZiBFTkFCTEUoREFUQUJBU0Up
CiAgICAgICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuY2xlYXIoKTsKICNlbmRpZgpAQCAtNzM5LDgg
Kzc0Miw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogI2VuZGlmCiAKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKLSAg
ICAgICAgICAgIHJlc2V0U2NyaXB0T2JqZWN0cygpOwotCiAgICAgICAgICAgICBpZiAoIWxvYWRl
ci0+ZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nRnJvbUNhY2hlZFBhZ2UoKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChtX21haW5SZXNvdXJjZSAmJiBtX21haW5SZXNvdXJjZS0+aXNTYW1lTG9h
ZGVyKGxvYWRlcikpOwogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgbWFpbiBy
ZXNvdXJjZSB1bnRpbCBpdHMgbG9hZCBpcyBjb21taXR0ZWQuIFRoaXMgaXMKQEAgLTExMDgsNiAr
MTEwOSw4OSBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UoU3Rv
cmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYQogICAgIGlmIChtX2Zyb250ZW5kKQog
ICAgICAgICByZXNvdXJjZS0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsKIH0KKwordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRnJhbWUqIGZyYW1lID0gc3RvcmFnZS0+ZnJhbWUoKTsKKyAgICBib29sIGlzTG9j
YWxTdG9yYWdlID0gKGZyYW1lLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCkgPT0gc3RvcmFn
ZSk7CisgICAgaW50IHN0b3JhZ2VSZXNvdXJjZUlkID0gMDsKKyAgICBET01TdG9yYWdlUmVzb3Vy
Y2VzU2V0OjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVu
ZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2Rv
bVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewor
ICAgICAgICBpZiAoKCppdCktPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFn
ZSkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2VSZXNvdXJjZUlkID0gKCppdCktPmlkKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RvcmFnZVJlc291cmNl
SWQpIHsKKyAgICAgICAgbV9mcm9udGVuZC0+c2VsZWN0RE9NU3RvcmFnZShzdG9yYWdlUmVzb3Vy
Y2VJZCk7CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3Jh
Z2VFbnRyaWVzKGludCBjYWxsSWQsIGludCBzdG9yYWdlSWQpCit7CisgICAgaWYgKCFtX2Zyb250
ZW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JpcHRBcnJheSBqc29uQXJyYXkgPSBtX2Zy
b250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJj
ZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlk
KTsKKyAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7CisgICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+
c3RhcnRSZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCgpOworICAgICAgICBTdG9yYWdlKiBkb21T
dG9yYWdlID0gc3RvcmFnZVJlc291cmNlLT5kb21TdG9yYWdlKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBkb21TdG9yYWdlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICBTdHJpbmcgbmFtZShkb21TdG9yYWdlLT5rZXkoaSkpOworICAgICAgICAgICAgU3RyaW5nIHZh
bHVlKGRvbVN0b3JhZ2UtPmdldEl0ZW0obmFtZSkpOworICAgICAgICAgICAgU2NyaXB0QXJyYXkg
ZW50cnkgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgICAgICAgICAgZW50cnku
c2V0KDAsIG5hbWUpOworICAgICAgICAgICAgZW50cnkuc2V0KDEsIHZhbHVlKTsKKyAgICAgICAg
ICAgIGpzb25BcnJheS5zZXQoaSwgZW50cnkpOworICAgICAgICB9CisgICAgfQorICAgIG1fZnJv
bnRlbmQtPmRpZEdldERPTVN0b3JhZ2VFbnRyaWVzKGNhbGxJZCwganNvbkFycmF5KTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwg
bG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQor
eworICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7CisgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVz
b3VyY2UgPSBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOworICAgIGlmIChz
dG9yYWdlUmVzb3VyY2UpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOwor
ICAgICAgICBzdG9yYWdlUmVzb3VyY2UtPmRvbVN0b3JhZ2UoKS0+c2V0SXRlbShrZXksIHZhbHVl
LCBleGNlcHRpb24pOworICAgICAgICBzdWNjZXNzID0gKGV4Y2VwdGlvbiA9PSAwKTsKKyAgICB9
CisgICAgbV9mcm9udGVuZC0+ZGlkU2V0RE9NU3RvcmFnZUl0ZW0oY2FsbElkLCBzdWNjZXNzKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25n
IGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmICgh
bV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7
CisgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRE
T01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOworICAgIGlmIChzdG9yYWdlUmVzb3Vy
Y2UpIHsKKyAgICAgICAgc3RvcmFnZVJlc291cmNlLT5kb21TdG9yYWdlKCktPnJlbW92ZUl0ZW0o
a2V5KTsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgfQorICAgIG1fZnJvbnRlbmQtPmRp
ZFJlbW92ZURPTVN0b3JhZ2VJdGVtKGNhbGxJZCwgc3VjY2Vzcyk7Cit9CisKK0luc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFnZVJlc291
cmNlRm9ySWQoaW50IHN0b3JhZ2VJZCkKK3sKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0Ojpp
dGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAg
IGZvciAoRE9NU3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VS
ZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoKCppdCktPmlkKCkgPT0gc3RvcmFnZUlkKSB7CisgICAgICAgICAgICByZXR1cm4gaXQtPmdl
dCgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQogI2VuZGlmCiAKIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpIGNvbnN0
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggZjNlMjMwZS4uMjAy
OTVhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNzQsNiAr
NzQsNyBAQCBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwogY2xh
c3MgU2NyaXB0U3RyaW5nOwogY2xhc3MgU2hhcmVkQnVmZmVyOworY2xhc3MgU3RvcmFnZTsKIGNs
YXNzIFN0b3JhZ2VBcmVhOwogCiBjbGFzcyBDb25zb2xlTWVzc2FnZTsKQEAgLTIzMiw2ICsyMzMs
MTAgQEAgcHVibGljOgogI2VuZGlmCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgIHZvaWQg
ZGlkVXNlRE9NU3RvcmFnZShTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIGJvb2wgaXNMb2NhbFN0
b3JhZ2UsIEZyYW1lKiBmcmFtZSk7CisgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2Uq
IHN0b3JhZ2UpOworICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMoaW50IGNhbGxJZCwgaW50
IHN0b3JhZ2VJZCk7CisgICAgdm9pZCBzZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9u
ZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKKyAg
ICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCwg
Y29uc3QgU3RyaW5nJiBrZXkpOwogI2VuZGlmCiAKICAgICBjb25zdCBSZXNvdXJjZXNNYXAmIHJl
c291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VzOyB9CkBAIC0zMDEsNiArMzA2LDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1dHRvbihib29sKTsKICAgICB2b2lk
IGVuYWJsZURlYnVnZ2VyRnJvbUZyb250ZW5kKGJvb2wgYWx3YXlzKTsKICNlbmRpZgorI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKKyAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIGdldERP
TVN0b3JhZ2VSZXNvdXJjZUZvcklkKGludCBzdG9yYWdlSWQpOworI2VuZGlmCiAKICAgICB2b2lk
IGZvY3VzTm9kZSgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2UuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlLmNwcAppbmRleCAyZjRhYTUzLi4xZDViODMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAKQEAgLTM1LDIxICsz
NSwyNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIgogCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZC5oIgogI2luY2x1ZGUgIlNjcmlwdE9i
amVjdC5oIgotI2luY2x1ZGUgIlNjcmlwdE9iamVjdFF1YXJhbnRpbmUuaCIKICNpbmNsdWRlICJT
dG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUV2ZW50LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAoraW50IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZTo6c19uZXh0VW51c2VkSWQgPSAxOworCiBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6
Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZShTdG9yYWdlKiBkb21TdG9yYWdlLCBib29sIGlz
TG9jYWxTdG9yYWdlLCBGcmFtZSogZnJhbWUpCi0gICAgOiBtX2RvbVN0b3JhZ2UoZG9tU3RvcmFn
ZSkKKyAgICA6ICBFdmVudExpc3RlbmVyKEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZVR5cGUp
CisgICAgLCBtX2RvbVN0b3JhZ2UoZG9tU3RvcmFnZSkKICAgICAsIG1faXNMb2NhbFN0b3JhZ2Uo
aXNMb2NhbFN0b3JhZ2UpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9zY3JpcHRPYmpl
Y3RDcmVhdGVkKGZhbHNlKQorICAgICwgbV9mcm9udGVuZCgwKQorICAgICwgbV9pZChzX25leHRV
bnVzZWRJZCsrKQorICAgICwgbV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZChmYWxzZSkKIHsK
IH0KIApAQCAtNjAsMjMgKzY2LDUwIEBAIGJvb2wgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
Ojppc1NhbWVIb3N0QW5kVHlwZShGcmFtZSogZnJhbWUsIGJvb2wgaXNMb2NhbFN0CiAKIHZvaWQg
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpiaW5kKEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKIHsKLSAgICBpZiAobV9zY3JpcHRPYmplY3RDcmVhdGVkKQotICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKCFtX2Zyb250ZW5kKTsKKyAgICBtX2Zyb250ZW5kID0gZnJvbnRlbmQ7CiAK
ICAgICBTY3JpcHRPYmplY3QganNvbk9iamVjdCA9IGZyb250ZW5kLT5uZXdTY3JpcHRPYmplY3Qo
KTsKLSAgICBTY3JpcHRPYmplY3QgZG9tU3RvcmFnZTsKLSAgICBpZiAoIWdldFF1YXJhbnRpbmVk
U2NyaXB0T2JqZWN0KG1fZG9tU3RvcmFnZS5nZXQoKSwgZG9tU3RvcmFnZSkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBqc29uT2JqZWN0LnNldCgiZG9tU3RvcmFnZSIsIGRvbVN0b3JhZ2UpOwogICAg
IGpzb25PYmplY3Quc2V0KCJob3N0IiwgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS0+aG9zdCgpKTsKICAgICBqc29uT2JqZWN0LnNldCgiaXNMb2NhbFN0b3JhZ2UiLCBtX2lz
TG9jYWxTdG9yYWdlKTsKLSAgICBpZiAoZnJvbnRlbmQtPmFkZERPTVN0b3JhZ2UoanNvbk9iamVj
dCkpCi0gICAgICAgIG1fc2NyaXB0T2JqZWN0Q3JlYXRlZCA9IHRydWU7CisgICAganNvbk9iamVj
dC5zZXQoImlkIiwgbV9pZCk7CisgICAgZnJvbnRlbmQtPmFkZERPTVN0b3JhZ2UoanNvbk9iamVj
dCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjp1bmJpbmQoKQogewot
ICAgIG1fc2NyaXB0T2JqZWN0Q3JlYXRlZCA9IGZhbHNlOworICAgIEFTU0VSVChtX2Zyb250ZW5k
KTsKKyAgICBpZiAobV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCkgeworICAgICAgICBtX2Zy
YW1lLT5kb21XaW5kb3coKS0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3RvcmFn
ZUV2ZW50LCB0aGlzLCB0cnVlKTsKKyAgICAgICAgbV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVu
ZCA9IGZhbHNlOworICAgIH0KKyAgICBtX2Zyb250ZW5kID0gMDsKK30KKwordm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U6OnN0YXJ0UmVwb3J0aW5nQ2hhbmdlc1RvRnJvbnRlbmQoKQor
eworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyAgICBpZiAoIW1fcmVwb3J0aW5nQ2hhbmdlc1Rv
RnJvbnRlbmQpIHsKKyAgICAgICAgbV9mcmFtZS0+ZG9tV2luZG93KCktPmFkZEV2ZW50TGlzdGVu
ZXIoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCwgdGhpcywgdHJ1ZSk7CisgICAgICAgIG1fcmVw
b3J0aW5nQ2hhbmdlc1RvRnJvbnRlbmQgPSB0cnVlOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCkKK3sK
KyAgICBBU1NFUlQobV9mcm9udGVuZCk7CisgICAgQVNTRVJUKGV2ZW50TmFtZXMoKS5zdG9yYWdl
RXZlbnQgPT0gZXZlbnQtPnR5cGUoKSk7CisgICAgU3RvcmFnZUV2ZW50KiBzdG9yYWdlRXZlbnQg
PSBzdGF0aWNfY2FzdDxTdG9yYWdlRXZlbnQqPihldmVudCk7CisgICAgU3RvcmFnZSogc3RvcmFn
ZSA9IHN0b3JhZ2VFdmVudC0+c3RvcmFnZUFyZWEoKTsKKyAgICBib29sIGlzTG9jYWxTdG9yYWdl
ID0gc3RvcmFnZUV2ZW50LT5zb3VyY2UoKS0+bG9jYWxTdG9yYWdlKCkgPT0gc3RvcmFnZTsKKyAg
ICBpZiAoaXNTYW1lSG9zdEFuZFR5cGUoc3RvcmFnZS0+ZnJhbWUoKSwgaXNMb2NhbFN0b3JhZ2Up
KSB7CisgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZURPTVN0b3JhZ2UobV9pZCk7CisgICAgfQor
fQorCitib29sIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6b3BlcmF0b3I9PShjb25zdCBF
dmVudExpc3RlbmVyJiBsaXN0ZW5lcikKK3sKKyAgICByZXR1cm4gKHRoaXMgPT0gSW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlOjpjYXN0KCZsaXN0ZW5lcikpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2UuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZS5oCmluZGV4IDNlMDU4OTcuLmE1MjdlN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBF
TkFCTEUoRE9NX1NUT1JBR0UpCiAKKyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0T2JqZWN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIApAQCAtNDYsMTcg
KzQ3LDI5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAgICBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZDsKIAotICAgIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNv
dXJjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZT4gewor
ICAgIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSA6IHB1YmxpYyBFdmVudExpc3Rl
bmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZT4gY3JlYXRlKFN0b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UoZG9tU3RvcmFnZSwgaXNMb2Nh
bFN0b3JhZ2UsIGZyYW1lKSk7CiAgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGNvbnN0IEluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogY2FzdChjb25zdCBFdmVudExpc3RlbmVyKiBsaXN0ZW5l
cikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGxpc3RlbmVyLT50eXBlKCkgPT0gSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlVHlwZQorICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxj
b25zdCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqPihsaXN0ZW5lcikKKyAgICAgICAgICAg
IDogMDsKKyAgICAgICAgfQogCiAgICAgICAgIHZvaWQgYmluZChJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQpOwogICAgICAgICB2b2lkIHVuYmluZCgpOworICAgICAgICB2b2lkIHN0YXJ0UmVw
b3J0aW5nQ2hhbmdlc1RvRnJvbnRlbmQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RXZlbnQoRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcik7CiAKICAgICAgICAgYm9v
bCBpc1NhbWVIb3N0QW5kVHlwZShGcmFtZSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpIGNvbnN0Owor
ICAgICAgICBsb25nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBTdG9yYWdl
KiBkb21TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gbV9kb21TdG9yYWdlLmdldCgpOyB9CiAKICAg
ICBwcml2YXRlOgogCkBAIC02NSw4ICs3OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFJlZlB0cjxTdG9yYWdlPiBtX2RvbVN0b3JhZ2U7CiAgICAgICAgIGJvb2wgbV9pc0xvY2Fs
U3RvcmFnZTsKICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwotICAgICAgICBib29sIG1f
c2NyaXB0T2JqZWN0Q3JlYXRlZDsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRl
bmQ7CisgICAgICAgIGludCBtX2lkOworICAgICAgICBib29sIG1fcmVwb3J0aW5nQ2hhbmdlc1Rv
RnJvbnRlbmQ7CiAKKyAgICAgICAgc3RhdGljIGludCBzX25leHRVbnVzZWRJZDsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAKaW5kZXggYzhhMmY1Yy4uYzk3OTNjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kLmNwcApAQCAtMzk5LDEzICszOTksNDEgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6c2VsZWN0RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQogI2VuZGlmCiAKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZWxlY3RET01TdG9yYWdl
KFN0b3JhZ2UqIHN0b3JhZ2UpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZWxlY3RET01TdG9y
YWdlKGludCBzdG9yYWdlSWQpCiB7CiAgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVu
Y3Rpb24obmV3RnVuY3Rpb25DYWxsKCJzZWxlY3RET01TdG9yYWdlIikpOwotICAgIFNjcmlwdE9i
amVjdCBxdWFyYW50aW5lZE9iamVjdDsKLSAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2Jq
ZWN0KHN0b3JhZ2UsIHF1YXJhbnRpbmVkT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZ1
bmN0aW9uLT5hcHBlbmRBcmd1bWVudChxdWFyYW50aW5lZE9iamVjdCk7CisgICAgZnVuY3Rpb24t
PmFwcGVuZEFyZ3VtZW50KHN0b3JhZ2VJZCk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMoaW50IGNhbGxJ
ZCwgY29uc3QgU2NyaXB0QXJyYXkmIGVudHJpZXMpCit7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0
aW9uQ2FsbD4gZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJkaWRHZXRET01TdG9yYWdlRW50cmll
cyIpKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5jdGlv
bi0+YXBwZW5kQXJndW1lbnQoZW50cmllcyk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6ZGlkU2V0RE9NU3RvcmFnZUl0ZW0oaW50IGNhbGxJZCwg
Ym9vbCBzdWNjZXNzKQoreworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9u
KG5ld0Z1bmN0aW9uQ2FsbCgiZGlkU2V0RE9NU3RvcmFnZUl0ZW0iKSk7CisgICAgZnVuY3Rpb24t
PmFwcGVuZEFyZ3VtZW50KGNhbGxJZCk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHN1
Y2Nlc3MpOworICAgIGZ1bmN0aW9uLT5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtKGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKK3sK
KyAgICBPd25QdHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwo
ImRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtIikpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVu
dChjYWxsSWQpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChzdWNjZXNzKTsKKyAgICBm
dW5jdGlvbi0+Y2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01T
dG9yYWdlKGludCBzdG9yYWdlSWQpCit7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4g
ZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJ1cGRhdGVET01TdG9yYWdlIikpOworICAgIGZ1bmN0
aW9uLT5hcHBlbmRBcmd1bWVudChzdG9yYWdlSWQpOwogICAgIGZ1bmN0aW9uLT5jYWxsKCk7CiB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDQyNzY4ZTYu
LmY5ZDNiYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtOTksNyAr
OTksMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAgICAgICAgIGJvb2wgYWRkRE9NU3RvcmFnZShjb25zdCBTY3JpcHRPYmplY3QmIGRv
bVN0b3JhZ2VPYmopOwotICAgICAgICB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3Rv
cmFnZSk7CisgICAgICAgIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKKyAg
ICAgICAgdm9pZCBkaWRHZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2FsbElkLCBjb25zdCBTY3Jp
cHRBcnJheSYgZW50cmllcyk7CisgICAgICAgIHZvaWQgZGlkU2V0RE9NU3RvcmFnZUl0ZW0oaW50
IGNhbGxJZCwgYm9vbCBzdWNjZXNzKTsKKyAgICAgICAgdm9pZCBkaWRSZW1vdmVET01TdG9yYWdl
SXRlbShpbnQgY2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIHVwZGF0ZURPTVN0
b3JhZ2UoaW50IHN0b3JhZ2VJZCk7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHNldERvY3VtZW50
KGNvbnN0IFNjcmlwdE9iamVjdCYgcm9vdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRE9NU3RvcmFnZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlLmpzCmluZGV4IDUyMDdiNjkuLjExMmU4NjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCkBAIC0yNiwyNCArMjYsMjIgQEAKICAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UgPSBmdW5jdGlvbihkb21TdG9yYWdlLCBk
b21haW4sIGlzTG9jYWxTdG9yYWdlKQorV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UgPSBmdW5jdGlv
bihpZCwgZG9tYWluLCBpc0xvY2FsU3RvcmFnZSkKIHsKLSAgICB0aGlzLmRvbVN0b3JhZ2UgPSBk
b21TdG9yYWdlOwotICAgIHRoaXMuZG9tYWluID0gZG9tYWluOwotICAgIHRoaXMuaXNMb2NhbFN0
b3JhZ2UgPSBpc0xvY2FsU3RvcmFnZTsKKyAgICB0aGlzLl9pZCA9IGlkOworICAgIHRoaXMuX2Rv
bWFpbiA9IGRvbWFpbjsKKyAgICB0aGlzLl9pc0xvY2FsU3RvcmFnZSA9IGlzTG9jYWxTdG9yYWdl
OwogfQogCiBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGRv
bVN0b3JhZ2UoKQorICAgIGdldCBpZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZG9t
U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkOwogICAgIH0sCiAKLSAgICBzZXQgZG9t
U3RvcmFnZSh4KQorICAgIGdldCBkb21TdG9yYWdlKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlz
Ll9kb21TdG9yYWdlID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9k
b21TdG9yYWdlID0geDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RvbVN0b3JhZ2U7CiAgICAgfSwK
IAogICAgIGdldCBkb21haW4oKQpAQCAtNTEsMjIgKzQ5LDMwIEBAIFdlYkluc3BlY3Rvci5ET01T
dG9yYWdlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2RvbWFpbjsKICAgICB9
LAogCi0gICAgc2V0IGRvbWFpbih4KQorICAgIGdldCBpc0xvY2FsU3RvcmFnZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbFN0b3JhZ2U7CisgICAgfSwKKworICAgIGdldEVu
dHJpZXNBc3luYzogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICBpZiAodGhpcy5f
ZG9tYWluID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9kb21haW4g
PSB4OworICAgICAgICB2YXIgY2FsbElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2Fs
bGJhY2spOworICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmdldERPTVN0b3JhZ2VFbnRyaWVz
KGNhbGxJZCwgdGhpcy5faWQpOwogICAgIH0sCiAgICAgCi0gICAgZ2V0IGlzTG9jYWxTdG9yYWdl
KCkKKyAgICBzZXRJdGVtQXN5bmM6IGZ1bmN0aW9uKGtleSwgdmFsdWUsIGNhbGxiYWNrKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxTdG9yYWdlOworICAgICAgICB2YXIgY2Fs
bElkID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLndyYXAoY2FsbGJhY2spOworICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyLnNldERPTVN0b3JhZ2VJdGVtKGNhbGxJZCwgdGhpcy5faWQsIGtleSwg
dmFsdWUpOwogICAgIH0sCiAgICAgCi0gICAgc2V0IGlzTG9jYWxTdG9yYWdlKHgpCisgICAgcmVt
b3ZlSXRlbUFzeW5jOiBmdW5jdGlvbihrZXksIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX2lzTG9jYWxTdG9yYWdlID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB0aGlzLl9pc0xvY2FsU3RvcmFnZSA9IHg7CisgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNw
ZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIucmVtb3ZlRE9NU3RvcmFnZUl0ZW0oY2FsbElkLCB0aGlzLl9pZCwga2V5KTsKICAgICB9CiB9
CisKK1dlYkluc3BlY3Rvci5kaWRHZXRET01TdG9yYWdlRW50cmllcyA9IFdlYkluc3BlY3Rvci5D
YWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7CitXZWJJbnNwZWN0b3IuZGlkU2V0RE9NU3RvcmFnZUl0
ZW0gPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9y
LmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVtID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3ND
YWxsYmFjazsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9y
YWdlRGF0YUdyaWQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZURh
dGFHcmlkLmpzCmluZGV4IGVmZGQwOTAuLjRhMzdjMjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlRGF0YUdyaWQuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3JhZ2VEYXRhR3JpZC5qcwpAQCAtMjMsMTAgKzIzLDEyIEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQg
PSBmdW5jdGlvbihjb2x1bW5zKQorV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZCA9IGZ1
bmN0aW9uKGNvbHVtbnMsIGRvbVN0b3JhZ2UsIGtleXMpCiB7CiAgICAgV2ViSW5zcGVjdG9yLkRh
dGFHcmlkLmNhbGwodGhpcywgY29sdW1ucyk7CiAgICAgdGhpcy5kYXRhVGFibGVCb2R5LmFkZEV2
ZW50TGlzdGVuZXIoImRibGNsaWNrIiwgdGhpcy5fb25kYmxjbGljay5iaW5kKHRoaXMpLCBmYWxz
ZSk7CisgICAgdGhpcy5fZG9tU3RvcmFnZSA9IGRvbVN0b3JhZ2U7CisgICAgdGhpcy5fa2V5cyA9
IGtleXM7CiB9CiAKIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90eXBlID0g
ewpAQCAtNDQsNyArNDYsNiBAQCBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fZWRpdGluZyA9IHRydWU7CiAgICAgICAgIHRoaXMuX2Vk
aXRpbmdOb2RlID0gbm9kZTsKICAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUuc2VsZWN0KCk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMuc3RvcmFnZS5fdW5yZWdpc3RlclN0b3JhZ2VFdmVu
dExpc3RlbmVyKCk7CiAKICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLl9lZGl0aW5nTm9kZS5f
ZWxlbWVudC5jaGlsZHJlbltjb2x1bW5dOwogICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0
aW5nKGVsZW1lbnQsIHRoaXMuX2VkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5fZWRp
dGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBlbGVtZW50LnRleHRDb250ZW50KTsKQEAgLTY5LDcg
KzcwLDYgQEAgV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRFZGl0aW5nQ29sdW1uT2ZEYXRhR3JpZE5vZGUo
dGhpcy5fZWRpdGluZ05vZGUsIDApOwogCiAgICAgICAgIHRoaXMuX2VkaXRpbmcgPSB0cnVlOwot
ICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2UuX3VucmVnaXN0ZXJTdG9yYWdlRXZl
bnRMaXN0ZW5lcigpOwogICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGVsZW1lbnQs
IHRoaXMuX2VkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5fZWRpdGluZ0NhbmNlbGxl
ZC5iaW5kKHRoaXMpLCBlbGVtZW50LnRleHRDb250ZW50KTsKICAgICAgICAgd2luZG93LmdldFNl
bGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoZWxlbWVudCwgMCwgZWxlbWVudCwgMSk7CiAgICAg
fSwKQEAgLTExOCwyMiArMTE4LDIwIEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
dmFyIGRvbVN0b3JhZ2UgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2UudmlzaWJsZVZpZXcu
ZG9tU3RvcmFnZS5kb21TdG9yYWdlOwotICAgICAgICBpZiAoZG9tU3RvcmFnZSkgewotICAgICAg
ICAgICAgaWYgKGNvbHVtbklkZW50aWZpZXIgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChk
b21TdG9yYWdlLmdldEl0ZW0obmV3VGV4dCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAg
ICBlbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5fZWRpdGluZ05vZGUuZGF0YVswXTsKLSAgICAg
ICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZChlbGVtZW50KTsKLSAgICAgICAg
ICAgICAgICAgICAgbW92ZVRvTmV4dElmTmVlZGVkLmNhbGwodGhpcywgZmFsc2UpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGRvbVN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzBdKTsKLSAgICAg
ICAgICAgICAgICBkb21TdG9yYWdlLnNldEl0ZW0obmV3VGV4dCwgdGhpcy5fZWRpdGluZ05vZGUu
ZGF0YVsxXSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUuZGF0YVswXSA9IG5l
d1RleHQ7ICAgICAgICAgICAgCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGRvbVN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzBdLCBuZXdUZXh0KTsK
LSAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzFdID0gbmV3VGV4dDsKKyAg
ICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdlOworICAgICAgICBpZiAoY29s
dW1uSWRlbnRpZmllciA9PSAwKSB7CisgICAgICAgICAgICBpZiAodGhpcy5fa2V5cy5pbmRleE9m
KG5ld1RleHQpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9
IHRoaXMuX2VkaXRpbmdOb2RlLmRhdGFbMF07CisgICAgICAgICAgICAgICAgdGhpcy5fZWRpdGlu
Z0NhbmNlbGxlZChlbGVtZW50KTsKKyAgICAgICAgICAgICAgICBtb3ZlVG9OZXh0SWZOZWVkZWQu
Y2FsbCh0aGlzLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgZG9tU3RvcmFnZS5yZW1vdmVJdGVtQXN5bmModGhpcy5fZWRpdGluZ05v
ZGUuZGF0YVswXSk7CisgICAgICAgICAgICBkb21TdG9yYWdlLnNldEl0ZW1Bc3luYyhuZXdUZXh0
LCB0aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzFdKTsKKyAgICAgICAgICAgIHRoaXMuX2VkaXRpbmdO
b2RlLmRhdGFbMF0gPSBuZXdUZXh0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZG9t
U3RvcmFnZS5zZXRJdGVtQXN5bmModGhpcy5fZWRpdGluZ05vZGUuZGF0YVswXSwgbmV3VGV4dCk7
CisgICAgICAgICAgICB0aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzFdID0gbmV3VGV4dDsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICh0aGlzLl9lZGl0aW5nTm9kZS5pc0NyZWF0aW9uTm9kZSkKQEAg
LTE0NywxOCArMTQ1LDE2IEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90
eXBlID0gewogICAgIHsKICAgICAgICAgZGVsZXRlIHRoaXMuX2VkaXRpbmc7CiAgICAgICAgIHRo
aXMuX2VkaXRpbmdOb2RlID0gbnVsbDsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9y
YWdlLl9yZWdpc3RlclN0b3JhZ2VFdmVudExpc3RlbmVyKCk7CiAgICAgfSwKIAogICAgIGRlbGV0
ZVNlbGVjdGVkUm93OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICB2YXIgbm9kZSA9IHRoaXMu
c2VsZWN0ZWROb2RlOwotICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE5vZGUuaXNDcmVhdGlvbk5v
ZGUpCisgICAgICAgIGlmICghbm9kZSB8fCBub2RlLmlzQ3JlYXRpb25Ob2RlKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIHZhciBkb21TdG9yYWdlID0gV2ViSW5zcGVjdG9yLnBhbmVs
cy5zdG9yYWdlLnZpc2libGVWaWV3LmRvbVN0b3JhZ2UuZG9tU3RvcmFnZTsKLSAgICAgICAgaWYg
KG5vZGUgJiYgZG9tU3RvcmFnZSkKLSAgICAgICAgICAgIGRvbVN0b3JhZ2UucmVtb3ZlSXRlbShu
b2RlLmRhdGFbMF0pOworICAgICAgICBpZiAodGhpcy5fZG9tU3RvcmFnZSkKKyAgICAgICAgICAg
IHRoaXMuX2RvbVN0b3JhZ2UucmVtb3ZlSXRlbUFzeW5jKG5vZGUuZGF0YVswXSk7CiAgICAgfQog
fQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZUl0
ZW1zVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNW
aWV3LmpzCmluZGV4IDg2MTdkNjAuLmRlMDMzMmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzCkBAIC02MSwzOSArNjEsODggQEAg
V2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJdGVtc1ZpZXcucHJvdG90eXBlID0gewogICAgIHVwZGF0
ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7Ci0gICAgICAgIHZhciBoYXNET01TdG9yYWdlID0gdGhpcy5kb21TdG9yYWdlOwotICAgICAg
ICBpZiAoaGFzRE9NU3RvcmFnZSkKLSAgICAgICAgICAgIGhhc0RPTVN0b3JhZ2UgPSB0aGlzLmRv
bVN0b3JhZ2UuZG9tU3RvcmFnZTsKLQotICAgICAgICBpZiAoaGFzRE9NU3RvcmFnZSkgewotICAg
ICAgICAgICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zdG9yYWdlLmRhdGFH
cmlkRm9yRE9NU3RvcmFnZSh0aGlzLmRvbVN0b3JhZ2UuZG9tU3RvcmFnZSk7Ci0gICAgICAgICAg
ICBpZiAoIWRhdGFHcmlkKQotICAgICAgICAgICAgICAgIGhhc0RPTVN0b3JhZ2UgPSAwOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQgPSBkYXRhR3Jp
ZDsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoZGF0YUdyaWQuZWxl
bWVudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7Ci0g
ICAgICAgICAgICAgICAgdGhpcy5kZWxldGVCdXR0b24udmlzaWJsZSA9IHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fc2hvd0RPTVN0
b3JhZ2VFbnRyaWVzLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuZG9tU3RvcmFnZS5nZXRFbnRy
aWVzQXN5bmMoY2FsbGJhY2spOworICAgIH0sCiAKLSAgICAgICAgaWYgKCFoYXNET01TdG9yYWdl
KSB7CisgICAgX3Nob3dET01TdG9yYWdlRW50cmllczogZnVuY3Rpb24oZW50cmllcykgCisgICAg
eworICAgICAgICBpZiAoZW50cmllcy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB0aGlzLl9k
YXRhR3JpZCA9IHRoaXMuX2RhdGFHcmlkRm9yRE9NU3RvcmFnZUVudHJpZXMoZW50cmllcyk7Cisg
ICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZGF0YUdyaWQuZWxlbWVu
dCk7CisgICAgICAgICAgICB0aGlzLl9kYXRhR3JpZC51cGRhdGVXaWR0aHMoKTsKKyAgICAgICAg
ICAgIHRoaXMuZGVsZXRlQnV0dG9uLnZpc2libGUgPSB0cnVlOworICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgdmFyIGVtcHR5TXNnRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImRpdiIpOwogICAgICAgICAgICAgZW1wdHlNc2dFbGVtZW50LmNsYXNzTmFtZSA9ICJzdG9yYWdl
LXRhYmxlLWVtcHR5IjsKICAgICAgICAgICAgIGlmICh0aGlzLmRvbVN0b3JhZ2UpCi0gICAgICAg
ICAgICBlbXB0eU1zZ0VsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IlRoaXMgc3RvcmFnZSBpcyBlbXB0eS4iKTsKKyAgICAgICAgICAgICAgICBlbXB0eU1zZ0VsZW1l
bnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRoaXMgc3RvcmFnZSBpcyBl
bXB0eS4iKTsKICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChlbXB0eU1zZ0Vs
ZW1lbnQpOwogICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQgPSBudWxsOwogICAgICAgICAgICAg
dGhpcy5kZWxldGVCdXR0b24udmlzaWJsZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfSwKLSAg
ICAKKwogICAgIHJlc2l6ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2Rh
dGFHcmlkKQogICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7CiAgICAg
fSwKIAorICAgIF9kYXRhR3JpZEZvckRPTVN0b3JhZ2VFbnRyaWVzOiBmdW5jdGlvbihlbnRyaWVz
KQorICAgIHsKKyAgICAgICAgdmFyIGNvbHVtbnMgPSB7fTsKKyAgICAgICAgY29sdW1uc1swXSA9
IHt9OworICAgICAgICBjb2x1bW5zWzFdID0ge307CisgICAgICAgIGNvbHVtbnNbMF0udGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIktleSIpOworICAgICAgICBjb2x1bW5zWzBdLndpZHRo
ID0gY29sdW1uc1swXS50aXRsZS5sZW5ndGg7CisgICAgICAgIGNvbHVtbnNbMV0udGl0bGUgPSBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIik7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGgg
PSBjb2x1bW5zWzFdLnRpdGxlLmxlbmd0aDsKKworICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKwor
ICAgICAgICB2YXIga2V5cyA9IFtdOworICAgICAgICB2YXIgbGVuZ3RoID0gZW50cmllcy5sZW5n
dGg7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsg
aW5kZXgrKykgeworICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTsKKworICAgICAgICAgICAgdmFy
IGtleSA9IGVudHJpZXNbaW5kZXhdWzBdOworICAgICAgICAgICAgZGF0YVswXSA9IGtleTsKKyAg
ICAgICAgICAgIGlmIChrZXkubGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkKKyAgICAgICAgICAg
ICAgICBjb2x1bW5zWzBdLndpZHRoID0ga2V5Lmxlbmd0aDsKKworICAgICAgICAgICAgdmFyIHZh
bHVlID0gZW50cmllc1tpbmRleF1bMV07CisgICAgICAgICAgICBkYXRhWzFdID0gdmFsdWU7Cisg
ICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gY29sdW1uc1sxXS53aWR0aCkKKyAgICAgICAg
ICAgICAgICBjb2x1bW5zWzFdLndpZHRoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgdmFy
IG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkRhdGFHcmlkTm9kZShkYXRhLCBmYWxzZSk7CisgICAg
ICAgICAgICBub2RlLnNlbGVjdGFibGUgPSB0cnVlOworICAgICAgICAgICAgbm9kZXMucHVzaChu
b2RlKTsKKyAgICAgICAgICAgIGtleXMucHVzaChrZXkpOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHRvdGFsQ29sdW1uV2lkdGhzID0gY29sdW1uc1swXS53aWR0aCArIGNvbHVtbnNbMV0ud2lk
dGg7CisgICAgICAgIHZhciB3aWR0aCA9IE1hdGgucm91bmQoKGNvbHVtbnNbMF0ud2lkdGggKiAx
MDApIC8gdG90YWxDb2x1bW5XaWR0aHMpOworICAgICAgICBjb25zdCBtaW5pbXVtUHJlY2VudCA9
IDEwOworICAgICAgICBpZiAod2lkdGggPCBtaW5pbXVtUHJlY2VudCkKKyAgICAgICAgICAgIHdp
ZHRoID0gbWluaW11bVByZWNlbnQ7CisgICAgICAgIGlmICh3aWR0aCA+IDEwMCAtIG1pbmltdW1Q
cmVjZW50KQorICAgICAgICAgICAgd2lkdGggPSAxMDAgLSBtaW5pbXVtUHJlY2VudDsKKyAgICAg
ICAgY29sdW1uc1swXS53aWR0aCA9IHdpZHRoOworICAgICAgICBjb2x1bW5zWzFdLndpZHRoID0g
MTAwIC0gd2lkdGg7CisgICAgICAgIGNvbHVtbnNbMF0ud2lkdGggKz0gIiUiOworICAgICAgICBj
b2x1bW5zWzFdLndpZHRoICs9ICIlIjsKKworICAgICAgICB2YXIgZGF0YUdyaWQgPSBuZXcgV2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZChjb2x1bW5zLCB0aGlzLmRvbVN0b3JhZ2UsIGtl
eXMpOworICAgICAgICB2YXIgbGVuZ3RoID0gbm9kZXMubGVuZ3RoOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGF0YUdyaWQuYXBwZW5kQ2hp
bGQobm9kZXNbaV0pOworICAgICAgICBkYXRhR3JpZC5hZGRDcmVhdGlvbk5vZGUoZmFsc2UpOwor
ICAgICAgICBpZiAobGVuZ3RoID4gMCkKKyAgICAgICAgICAgIG5vZGVzWzBdLnNlbGVjdGVkID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGRhdGFHcmlkOworICAgIH0sCisKICAgICBfZGVsZXRlQnV0
dG9uQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZGF0
YUdyaWQpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdG9yYWdl
UGFuZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3RvcmFnZVBhbmVsLmpzCmlu
ZGV4IGFlZDBkMDYuLjVhNDY5ZmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdG9yYWdlUGFuZWwuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0
b3JhZ2VQYW5lbC5qcwpAQCAtOTMsNyArOTMsNiBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVs
LnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5QYW5lbC5wcm90b3R5
cGUuc2hvdy5jYWxsKHRoaXMpOwogICAgICAgICB0aGlzLl91cGRhdGVTaWRlYmFyV2lkdGgoKTsK
LSAgICAgICAgdGhpcy5fcmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcigpOwogICAgIH0sCiAK
ICAgICByZXNldDogZnVuY3Rpb24oKQpAQCAtMTEwLDggKzEwOSw2IEBAIFdlYkluc3BlY3Rvci5T
dG9yYWdlUGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMuX2RhdGFiYXNlcyA9IFtd
OwogCi0gICAgICAgIHRoaXMuX3VucmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcigpOwotCiAg
ICAgICAgIGlmICh0aGlzLl9kb21TdG9yYWdlKSB7CiAgICAgICAgICAgICB2YXIgZG9tU3RvcmFn
ZUxlbmd0aCA9IHRoaXMuX2RvbVN0b3JhZ2UubGVuZ3RoOwogICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBkb21TdG9yYWdlTGVuZ3RoOyArK2kpIHsKQEAgLTE3NCwxNiArMTcxLDEyIEBA
IFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAg
fSwKIAotICAgIHNlbGVjdERPTVN0b3JhZ2U6IGZ1bmN0aW9uKHMpCisgICAgc2VsZWN0RE9NU3Rv
cmFnZTogZnVuY3Rpb24oc3RvcmFnZUlkKQogICAgIHsKLSAgICAgICAgdmFyIGlzTG9jYWxTdG9y
YWdlID0gKHMgPT09IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkubG9jYWxT
dG9yYWdlKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX2RvbVN0b3JhZ2Uu
bGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgICAgIHZhciBzdG9yYWdlID0gdGhpcy5f
ZG9tU3RvcmFnZVtpXTsKLSAgICAgICAgICAgIGlmICggaXNMb2NhbFN0b3JhZ2UgPT09IHN0b3Jh
Z2UuaXNMb2NhbFN0b3JhZ2UgKSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5zaG93RE9NU3RvcmFn
ZShzdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBzdG9yYWdlLl9kb21TdG9yYWdlVHJlZUVsZW1l
bnQuc2VsZWN0KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAg
ICAgICB2YXIgZG9tU3RvcmFnZSA9IHRoaXMuX2RvbVN0b3JhZ2VGb3JJZChzdG9yYWdlSWQpOwor
ICAgICAgICBpZiAoZG9tU3RvcmFnZSkgeworICAgICAgICAgICAgdGhpcy5zaG93RE9NU3RvcmFn
ZShkb21TdG9yYWdlKTsKKyAgICAgICAgICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VUcmVlRWxl
bWVudC5zZWxlY3QoKTsKICAgICAgICAgfQogICAgIH0sCiAKQEAgLTM4Myw2MSArMzc2LDYgQEAg
V2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiBk
YXRhR3JpZDsKICAgICB9LAogCi0gICAgZGF0YUdyaWRGb3JET01TdG9yYWdlOiBmdW5jdGlvbihk
b21TdG9yYWdlKQotICAgIHsKLSAgICAgICAgaWYgKCFkb21TdG9yYWdlLmxlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciBjb2x1bW5zID0ge307Ci0gICAgICAg
IGNvbHVtbnNbMF0gPSB7fTsKLSAgICAgICAgY29sdW1uc1sxXSA9IHt9OwotICAgICAgICBjb2x1
bW5zWzBdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJLZXkiKTsKLSAgICAgICAgY29s
dW1uc1swXS53aWR0aCA9IGNvbHVtbnNbMF0udGl0bGUubGVuZ3RoOwotICAgICAgICBjb2x1bW5z
WzFdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJWYWx1ZSIpOwotICAgICAgICBjb2x1
bW5zWzFdLndpZHRoID0gY29sdW1uc1sxXS50aXRsZS5sZW5ndGg7Ci0KLSAgICAgICAgdmFyIG5v
ZGVzID0gW107Ci0gICAgICAgIAotICAgICAgICB2YXIgbGVuZ3RoID0gZG9tU3RvcmFnZS5sZW5n
dGg7Ci0gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBkb21TdG9yYWdlLmxlbmd0
aDsgaW5kZXgrKykgewotICAgICAgICAgICAgdmFyIGRhdGEgPSB7fTsKLSAgICAgICAKLSAgICAg
ICAgICAgIHZhciBrZXkgPSBTdHJpbmcoZG9tU3RvcmFnZS5rZXkoaW5kZXgpKTsKLSAgICAgICAg
ICAgIGRhdGFbMF0gPSBrZXk7Ci0gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA+IGNvbHVtbnNb
MF0ud2lkdGgpCi0gICAgICAgICAgICAgICAgY29sdW1uc1swXS53aWR0aCA9IGtleS5sZW5ndGg7
Ci0gICAgICAgIAotICAgICAgICAgICAgdmFyIHZhbHVlID0gU3RyaW5nKGRvbVN0b3JhZ2UuZ2V0
SXRlbShrZXkpKTsKLSAgICAgICAgICAgIGRhdGFbMV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIGlm
ICh2YWx1ZS5sZW5ndGggPiBjb2x1bW5zWzFdLndpZHRoKQotICAgICAgICAgICAgICAgIGNvbHVt
bnNbMV0ud2lkdGggPSB2YWx1ZS5sZW5ndGg7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBX
ZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlKGRhdGEsIGZhbHNlKTsKLSAgICAgICAgICAgIG5vZGUu
c2VsZWN0YWJsZSA9IHRydWU7Ci0gICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdmFyIHRvdGFsQ29sdW1uV2lkdGhzID0gY29sdW1uc1swXS53aWR0aCAr
IGNvbHVtbnNbMV0ud2lkdGg7Ci0gICAgICAgIHZhciB3aWR0aCA9IE1hdGgucm91bmQoKGNvbHVt
bnNbMF0ud2lkdGggKiAxMDApIC8gdG90YWxDb2x1bW5XaWR0aHMpOwotICAgICAgICBjb25zdCBt
aW5pbXVtUHJlY2VudCA9IDEwOwotICAgICAgICBpZiAod2lkdGggPCBtaW5pbXVtUHJlY2VudCkK
LSAgICAgICAgICAgIHdpZHRoID0gbWluaW11bVByZWNlbnQ7Ci0gICAgICAgIGlmICh3aWR0aCA+
IDEwMCAtIG1pbmltdW1QcmVjZW50KQotICAgICAgICAgICAgd2lkdGggPSAxMDAgLSBtaW5pbXVt
UHJlY2VudDsKLSAgICAgICAgY29sdW1uc1swXS53aWR0aCA9IHdpZHRoOwotICAgICAgICBjb2x1
bW5zWzFdLndpZHRoID0gMTAwIC0gd2lkdGg7Ci0gICAgICAgIGNvbHVtbnNbMF0ud2lkdGggKz0g
IiUiOwotICAgICAgICBjb2x1bW5zWzFdLndpZHRoICs9ICIlIjsKLQotICAgICAgICB2YXIgZGF0
YUdyaWQgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZChjb2x1bW5zKTsKLSAg
ICAgICAgdmFyIGxlbmd0aCA9IG5vZGVzLmxlbmd0aDsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRhdGFHcmlkLmFwcGVuZENoaWxkKG5vZGVz
W2ldKTsKLSAgICAgICAgZGF0YUdyaWQuYWRkQ3JlYXRpb25Ob2RlKGZhbHNlKTsKLSAgICAgICAg
aWYgKGxlbmd0aCA+IDApCi0gICAgICAgICAgICBub2Rlc1swXS5zZWxlY3RlZCA9IHRydWU7Ci0g
ICAgICAgIHJldHVybiBkYXRhR3JpZDsKLSAgICB9LAotCiAgICAgcmVzaXplOiBmdW5jdGlvbigp
CiAgICAgewogICAgICAgICB2YXIgdmlzaWJsZVZpZXcgPSB0aGlzLnZpc2libGVWaWV3OwpAQCAt
NDQ1LDQ0ICszODMsMjkgQEAgV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICB2aXNpYmxlVmlldy5yZXNpemUoKTsKICAgICB9LAogCi0gICAgX3JlZ2lz
dGVyU3RvcmFnZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBp
bnNwZWN0ZWRXaW5kb3cgPSBJbnNwZWN0b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOwot
ICAgICAgICBpZiAoIWluc3BlY3RlZFdpbmRvdyB8fCAhaW5zcGVjdGVkV2luZG93LmRvY3VtZW50
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3N0b3JhZ2VFdmVudExpc3Rl
bmVyID0gSW5zcGVjdG9yQ29udHJvbGxlci53cmFwQ2FsbGJhY2sodGhpcy5fc3RvcmFnZUV2ZW50
LmJpbmQodGhpcykpOwotICAgICAgICBpbnNwZWN0ZWRXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
c3RvcmFnZSIsIHRoaXMuX3N0b3JhZ2VFdmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICB9LAotCi0g
ICAgX3VucmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oKQorICAgIHVwZGF0
ZURPTVN0b3JhZ2U6IGZ1bmN0aW9uKHN0b3JhZ2VJZCkKICAgICB7Ci0gICAgICAgIGlmICghdGhp
cy5fc3RvcmFnZUV2ZW50TGlzdGVuZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
dmFyIGluc3BlY3RlZFdpbmRvdyA9IEluc3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93
KCk7Ci0gICAgICAgIGlmICghaW5zcGVjdGVkV2luZG93IHx8ICFpbnNwZWN0ZWRXaW5kb3cuZG9j
dW1lbnQpCisgICAgICAgIHZhciBkb21TdG9yYWdlID0gdGhpcy5fZG9tU3RvcmFnZUZvcklkKHN0
b3JhZ2VJZCk7CisgICAgICAgIGlmICghZG9tU3RvcmFnZSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBpbnNwZWN0ZWRXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIs
IHRoaXMuX3N0b3JhZ2VFdmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICAgICAgZGVsZXRlIHRoaXMu
X3N0b3JhZ2VFdmVudExpc3RlbmVyOworICAgICAgICB2YXIgdmlldyA9IGRvbVN0b3JhZ2UuX2Rv
bVN0b3JhZ2VWaWV3OworICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyAmJiB2aWV3ID09PSB0
aGlzLnZpc2libGVWaWV3KQorICAgICAgICAgICAgZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVZpZXcu
dXBkYXRlKCk7CiAgICAgfSwKIAotICAgIF9zdG9yYWdlRXZlbnQ6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIF9kb21TdG9yYWdlRm9ySWQ6IGZ1bmN0aW9uKHN0b3JhZ2VJZCkKICAgICB7CiAgICAgICAg
IGlmICghdGhpcy5fZG9tU3RvcmFnZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2
YXIgaXNMb2NhbFN0b3JhZ2UgPSAoZXZlbnQuc3RvcmFnZUFyZWEgPT09IEluc3BlY3RvckNvbnRy
b2xsZXIuaW5zcGVjdGVkV2luZG93KCkubG9jYWxTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxsOwogICAgICAgICB2YXIgZG9tU3RvcmFnZUxlbmd0aCA9IHRoaXMuX2RvbVN0b3JhZ2Uu
bGVuZ3RoOwogICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvbVN0b3JhZ2VMZW5ndGg7ICsr
aSkgewogICAgICAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdlW2ldOwot
ICAgICAgICAgICAgaWYgKGlzTG9jYWxTdG9yYWdlID09PSBkb21TdG9yYWdlLmlzTG9jYWxTdG9y
YWdlKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBkb21TdG9yYWdlLl9kb21TdG9yYWdl
VmlldzsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy52aXNpYmxlVmlldyAmJiB2aWV3ID09PSB0
aGlzLnZpc2libGVWaWV3KQotICAgICAgICAgICAgICAgICAgICBkb21TdG9yYWdlLl9kb21TdG9y
YWdlVmlldy51cGRhdGUoKTsKKyAgICAgICAgICAgIGlmIChkb21TdG9yYWdlLmlkID09IHN0b3Jh
Z2VJZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBkb21TdG9yYWdlOwogICAgICAgICAgICAg
fQogICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0sCiAKICAgICBfc3RhcnRT
aWRlYmFyRHJhZ2dpbmc6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanMKaW5kZXggOTAyZGQ5NC4uNzYzY2EzMCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCkBAIC0xMDE2LDEyICsxMDE2LDE3IEBAIFdlYkluc3Bl
Y3Rvci5hZGREYXRhYmFzZSA9IGZ1bmN0aW9uKHBheWxvYWQpCiBXZWJJbnNwZWN0b3IuYWRkRE9N
U3RvcmFnZSA9IGZ1bmN0aW9uKHBheWxvYWQpCiB7CiAgICAgdmFyIGRvbVN0b3JhZ2UgPSBuZXcg
V2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UoCi0gICAgICAgIHBheWxvYWQuZG9tU3RvcmFnZSwKKyAg
ICAgICAgcGF5bG9hZC5pZCwKICAgICAgICAgcGF5bG9hZC5ob3N0LAogICAgICAgICBwYXlsb2Fk
LmlzTG9jYWxTdG9yYWdlKTsKICAgICB0aGlzLnBhbmVscy5zdG9yYWdlLmFkZERPTVN0b3JhZ2Uo
ZG9tU3RvcmFnZSk7CiB9CiAKK1dlYkluc3BlY3Rvci51cGRhdGVET01TdG9yYWdlID0gZnVuY3Rp
b24oc3RvcmFnZUlkKQoreworICAgIHRoaXMucGFuZWxzLnN0b3JhZ2UudXBkYXRlRE9NU3RvcmFn
ZShzdG9yYWdlSWQpOworfQorCiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmFja2luZ1dhc0VuYWJs
ZWQgPSBmdW5jdGlvbigpCiB7CiAgICAgdGhpcy5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJh
Y2tpbmdXYXNFbmFibGVkKCk7Cg==
</data>
<flag name="review"
          id="20978"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39936</attachid>
            <date>2009-09-22 12:17:16 -0700</date>
            <delta_ts>2009-09-22 17:09:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>serialize-domstorage-access2.patch</filename>
            <type>text/plain</type>
            <size>37114</size>
            <attacher name="Yury Semikhatsky">yurys</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZWUyNTMwNC4uZjJiMDgwYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OSBAQAorMjAwOS0wOS0xOCAgWXVyeSBTZW1pa2hh
dHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCisKKyAgICAgICAgV2ViSW5zcGVjdG9yOiBNaWdyYXRlIERhdGFiYXNlcyB0YWIg
dG8gSW5qZWN0ZWRTY3JpcHQgLworICAgICAgICBzZXJpYWxpemVkIGludGVyYWN0aW9uLgorCisg
ICAgICAgIERPTVN0b3JhZ2UgaW50ZXJhY3Rpb24gaXMgbm93IHNlcmlhbGl6ZWQgaW50byBKU09O
IG1lc3NhZ2VzCisgICAgICAgIGFuZCBkb2Vzbid0IHJlcXVpcmUgcXVhcmFudGluZWQgb2JqZWN0
cy4KKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yODg3MworCisgICAgICAgICogZG9tL0V2ZW50TGlzdGVuZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50TGlzdGVuZXI6Oik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQmFja2VuZDo6c2VsZWN0RE9N
U3RvcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpnZXRET01TdG9y
YWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpzZXRET01T
dG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JCYWNrZW5kOjpyZW1vdmVE
T01TdG9yYWdlSXRlbSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGw6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDb250cm9sbGVyOjpzZWxlY3RET01TdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckNvbnRyb2xsZXI6OnNldERPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklk
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpJbnNwZWN0b3JET01TdG9yYWdlUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpi
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6dW5i
aW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6c3Rh
cnRSZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01TdG9yYWdlUmVzb3VyY2U6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpjYXN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NU3RvcmFnZVJlc291cmNlOjpkb21TdG9yYWdlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OnNlbGVjdERPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmQ6
OmRpZEdldERPTVN0b3JhZ2VFbnRyaWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZy
b250ZW5kOjpkaWRTZXRET01TdG9yYWdlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JGcm9udGVuZDo6ZGlkUmVtb3ZlRE9NU3RvcmFnZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRnJvbnRlbmQ6OnVwZGF0ZURPTVN0b3JhZ2UpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9N
U3RvcmFnZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5nZXQgaWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLmdldCBkb21TdG9yYWdlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5nZXQgaXNMb2NhbFN0b3JhZ2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UucHJvdG90eXBlLmdldEVudHJpZXNBc3lu
Yyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZS5wcm90b3R5cGUuc2V0SXRlbUFz
eW5jKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJ
dGVtQXN5bmMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZURhdGFH
cmlkLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZS5fc3RhcnRFZGl0
aW5nQ29sdW1uT2ZEYXRhR3JpZE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3Jh
Z2VEYXRhR3JpZC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZS5fZWRpdGluZ0NvbW1pdHRlZCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZS5fZWRpdGluZ0Nh
bmNlbGxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3Rv
dHlwZS5kZWxldGVTZWxlY3RlZFJvdyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlSXRlbXNWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJ
dGVtc1ZpZXcucHJvdG90eXBlLnVwZGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRE9NU3Rv
cmFnZUl0ZW1zVmlldy5wcm90b3R5cGUuX3Nob3dET01TdG9yYWdlRW50cmllcyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZUl0ZW1zVmlldy5wcm90b3R5cGUuX2RhdGFHcmlkRm9y
RE9NU3RvcmFnZUVudHJpZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU3RvcmFn
ZVBhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5wcm90b3R5cGUu
c2hvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZS5yZXNl
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZS5zZWxlY3RE
T01TdG9yYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwucHJvdG90eXBl
LnVwZGF0ZURPTVN0b3JhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5lbC5w
cm90b3R5cGUuX2RvbVN0b3JhZ2VGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuYWRkRE9NU3RvcmFnZSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IudXBkYXRlRE9NU3RvcmFnZSk6CisKIDIwMDktMDktMTcgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQ
ZXRlcnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVuZXIuaCBiL1dlYkNv
cmUvZG9tL0V2ZW50TGlzdGVuZXIuaAppbmRleCA1MDFjNjFkLi43ZDNhYzk4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKKysrIGIvV2ViQ29yZS9kb20vRXZlbnRMaXN0
ZW5lci5oCkBAIC0zNyw3ICszNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwdWJsaWM6
CiAgICAgICAgIGVudW0gVHlwZSB7IEpTRXZlbnRMaXN0ZW5lclR5cGUsIAogICAgICAgICAgICAg
ICAgICAgICBJbWFnZUV2ZW50TGlzdGVuZXJUeXBlLCAKLSAgICAgICAgICAgICAgICAgICAgSW5z
cGVjdG9yRE9NQWdlbnRUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgSW5zcGVjdG9yRE9NQWdl
bnRUeXBlLAorICAgICAgICAgICAgICAgICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2VU
eXBlLAogICAgICAgICAgICAgICAgICAgICBPYmpDRXZlbnRMaXN0ZW5lclR5cGUsIAogICAgICAg
ICAgICAgICAgICAgICBDb25kaXRpb25FdmVudExpc3RlbmVyVHlwZSB9OwogICAgICAgICAgICAg
ICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKaW5kZXggMjUwMzRm
YS4uYzE0MGIxMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKQEAgLTUw
Miw4ICs1MDIsMjYgQEAgdm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpzZWxlY3REYXRhYmFzZShEYXRh
YmFzZSogZGF0YWJhc2UpCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogdm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCiB7Ci0gICAgaWYgKElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCA9IGluc3BlY3RvckZyb250ZW5kKCkpCi0gICAgICAg
IGZyb250ZW5kLT5zZWxlY3RET01TdG9yYWdlKHN0b3JhZ2UpOworICAgIGlmIChtX2luc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+c2VsZWN0RE9NU3Rv
cmFnZShzdG9yYWdlKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRET01TdG9yYWdl
RW50cmllcyhsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQpCit7CisgICAgaWYgKG1faW5zcGVj
dG9yQ29udHJvbGxlcikKKyAgICAgICAgbV9pbnNwZWN0b3JDb250cm9sbGVyLT5nZXRET01TdG9y
YWdlRW50cmllcyhjYWxsSWQsIHN0b3JhZ2VJZCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZDo6c2V0RE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAobV9pbnNwZWN0b3JD
b250cm9sbGVyKQorICAgICAgICBtX2luc3BlY3RvckNvbnRyb2xsZXItPnNldERPTVN0b3JhZ2VJ
dGVtKGNhbGxJZCwgc3RvcmFnZUlkLCBrZXksIHZhbHVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JC
YWNrZW5kOjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9yYWdlSWQs
IGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmIChtX2luc3BlY3RvckNvbnRyb2xsZXIpCisg
ICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oY2FsbElk
LCBzdG9yYWdlSWQsIGtleSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZC5oCmluZGV4IDIyYjQ2YmYuLjAzOGFlMTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kLmgKQEAgLTE1MSw2ICsxNTEsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBFTkFCTEUo
RE9NX1NUT1JBR0UpCiAgICAgdm9pZCBzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2Up
OworICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMobG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFn
ZUlkKTsKKyAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQg
cmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9uZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSk7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZC5pZGwKaW5kZXggNDU0MDAwMS4uMzk1ZTdmZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZC5pZGwKQEAgLTEyMSw2ICsxMjEsOSBAQCBtb2R1bGUgY29yZSB7CiAjZW5k
aWYKICNpZiBkZWZpbmVkKEVOQUJMRV9ET01fU1RPUkFHRSkgJiYgRU5BQkxFX0RPTV9TVE9SQUdF
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbiBET01PYmplY3Qgc3Rv
cmFnZSk7CisgICAgICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUVudHJpZXMoaW4gbG9uZyBjYWxsSWQs
IGluIGxvbmcgc3RvcmFnZUlkKTsKKyAgICAgICAgdm9pZCBzZXRET01TdG9yYWdlSXRlbShpbiBs
b25nIGNhbGxJZCwgaW4gbG9uZyBzdG9yYWdlSWQsIGluIERPTVN0cmluZyBrZXksIGluIERPTVN0
cmluZyB2YWx1ZSk7CisgICAgICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oaW4gbG9uZyBj
YWxsSWQsIGluIGxvbmcgc3RvcmFnZUlkLCBpbiBET01TdHJpbmcga2V5KTsKICNlbmRpZgogICAg
IH07CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGM2
OWMzMjQuLjRkOWVkM2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCkBAIC03MzEsNiArNzMxLDkgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21t
aXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIG1fY3VycmVudFVzZXJJbml0
aWF0ZWRQcm9maWxlTnVtYmVyID0gMTsKICAgICAgICAgbV9uZXh0VXNlckluaXRpYXRlZFByb2Zp
bGVOdW1iZXIgPSAxOwogI2VuZGlmCisgICAgICAgIC8vIHJlc2V0U2NyaXB0T2JqZWN0cyBzaG91
bGQgYmUgY2FsbGVkIGJlZm9yZSBkYXRhYmFzZSBhbmQgRE9NIHN0b3JhZ2UKKyAgICAgICAgLy8g
cmVzb3VyY2VzIGFyZSBjbGVhcmVkIHNvIHRoYXQgaXQgaGFzIGEgY2hhbmNlIHRvIHVuYmluZCB0
aGVtLgorICAgICAgICByZXNldFNjcmlwdE9iamVjdHMoKTsKICNpZiBFTkFCTEUoREFUQUJBU0Up
CiAgICAgICAgIG1fZGF0YWJhc2VSZXNvdXJjZXMuY2xlYXIoKTsKICNlbmRpZgpAQCAtNzM5LDgg
Kzc0Miw2IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVu
dExvYWRlciogbG9hZGVyKQogI2VuZGlmCiAKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKLSAg
ICAgICAgICAgIHJlc2V0U2NyaXB0T2JqZWN0cygpOwotCiAgICAgICAgICAgICBpZiAoIWxvYWRl
ci0+ZnJhbWVMb2FkZXIoKS0+aXNMb2FkaW5nRnJvbUNhY2hlZFBhZ2UoKSkgewogICAgICAgICAg
ICAgICAgIEFTU0VSVChtX21haW5SZXNvdXJjZSAmJiBtX21haW5SZXNvdXJjZS0+aXNTYW1lTG9h
ZGVyKGxvYWRlcikpOwogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGFkZCB0aGUgbWFpbiBy
ZXNvdXJjZSB1bnRpbCBpdHMgbG9hZCBpcyBjb21taXR0ZWQuIFRoaXMgaXMKQEAgLTExMDgsNiAr
MTEwOSw4NiBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZFVzZURPTVN0b3JhZ2UoU3Rv
cmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBib29sIGlzTG9jYQogICAgIGlmIChtX2Zyb250ZW5kKQog
ICAgICAgICByZXNvdXJjZS0+YmluZChtX2Zyb250ZW5kLmdldCgpKTsKIH0KKwordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2UqIHN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKHN0b3JhZ2UpOworICAgIGlmICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRnJhbWUqIGZyYW1lID0gc3RvcmFnZS0+ZnJhbWUoKTsKKyAgICBib29sIGlzTG9j
YWxTdG9yYWdlID0gKGZyYW1lLT5kb21XaW5kb3coKS0+bG9jYWxTdG9yYWdlKCkgPT0gc3RvcmFn
ZSk7CisgICAgaW50IHN0b3JhZ2VSZXNvdXJjZUlkID0gMDsKKyAgICBET01TdG9yYWdlUmVzb3Vy
Y2VzU2V0OjppdGVyYXRvciBkb21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVu
ZCgpOworICAgIGZvciAoRE9NU3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2Rv
bVN0b3JhZ2VSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkgewor
ICAgICAgICBpZiAoKCppdCktPmlzU2FtZUhvc3RBbmRUeXBlKGZyYW1lLCBpc0xvY2FsU3RvcmFn
ZSkpIHsKKyAgICAgICAgICAgIHN0b3JhZ2VSZXNvdXJjZUlkID0gKCppdCktPmlkKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RvcmFnZVJlc291cmNl
SWQpCisgICAgICAgIG1fZnJvbnRlbmQtPnNlbGVjdERPTVN0b3JhZ2Uoc3RvcmFnZVJlc291cmNl
SWQpOworfQorCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmdldERPTVN0b3JhZ2VFbnRyaWVz
KGludCBjYWxsSWQsIGludCBzdG9yYWdlSWQpCit7CisgICAgaWYgKCFtX2Zyb250ZW5kKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTY3JpcHRBcnJheSBqc29uQXJyYXkgPSBtX2Zyb250ZW5kLT5u
ZXdTY3JpcHRBcnJheSgpOworICAgIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFn
ZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoc3RvcmFnZUlkKTsKKyAgICBp
ZiAoc3RvcmFnZVJlc291cmNlKSB7CisgICAgICAgIHN0b3JhZ2VSZXNvdXJjZS0+c3RhcnRSZXBv
cnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCgpOworICAgICAgICBTdG9yYWdlKiBkb21TdG9yYWdlID0g
c3RvcmFnZVJlc291cmNlLT5kb21TdG9yYWdlKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBkb21TdG9yYWdlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcg
bmFtZShkb21TdG9yYWdlLT5rZXkoaSkpOworICAgICAgICAgICAgU3RyaW5nIHZhbHVlKGRvbVN0
b3JhZ2UtPmdldEl0ZW0obmFtZSkpOworICAgICAgICAgICAgU2NyaXB0QXJyYXkgZW50cnkgPSBt
X2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpOworICAgICAgICAgICAgZW50cnkuc2V0KDAsIG5h
bWUpOworICAgICAgICAgICAgZW50cnkuc2V0KDEsIHZhbHVlKTsKKyAgICAgICAgICAgIGpzb25B
cnJheS5zZXQoaSwgZW50cnkpOworICAgICAgICB9CisgICAgfQorICAgIG1fZnJvbnRlbmQtPmRp
ZEdldERPTVN0b3JhZ2VFbnRyaWVzKGNhbGxJZCwganNvbkFycmF5KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpzZXRET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwgbG9uZyBzdG9y
YWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlm
ICghbV9mcm9udGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBn
ZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOworICAgIGlmIChzdG9yYWdlUmVz
b3VyY2UpIHsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgICAgICBz
dG9yYWdlUmVzb3VyY2UtPmRvbVN0b3JhZ2UoKS0+c2V0SXRlbShrZXksIHZhbHVlLCBleGNlcHRp
b24pOworICAgICAgICBzdWNjZXNzID0gKGV4Y2VwdGlvbiA9PSAwKTsKKyAgICB9CisgICAgbV9m
cm9udGVuZC0+ZGlkU2V0RE9NU3RvcmFnZUl0ZW0oY2FsbElkLCBzdWNjZXNzKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVET01TdG9yYWdlSXRlbShsb25nIGNhbGxJZCwg
bG9uZyBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQoreworICAgIGlmICghbV9mcm9udGVu
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgSW5z
cGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2UgPSBnZXRET01TdG9yYWdl
UmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOworICAgIGlmIChzdG9yYWdlUmVzb3VyY2UpIHsKKyAg
ICAgICAgc3RvcmFnZVJlc291cmNlLT5kb21TdG9yYWdlKCktPnJlbW92ZUl0ZW0oa2V5KTsKKyAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgfQorICAgIG1fZnJvbnRlbmQtPmRpZFJlbW92ZURP
TVN0b3JhZ2VJdGVtKGNhbGxJZCwgc3VjY2Vzcyk7Cit9CisKK0luc3BlY3RvckRPTVN0b3JhZ2VS
ZXNvdXJjZSogSW5zcGVjdG9yQ29udHJvbGxlcjo6Z2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQo
aW50IHN0b3JhZ2VJZCkKK3sKKyAgICBET01TdG9yYWdlUmVzb3VyY2VzU2V0OjppdGVyYXRvciBk
b21TdG9yYWdlRW5kID0gbV9kb21TdG9yYWdlUmVzb3VyY2VzLmVuZCgpOworICAgIGZvciAoRE9N
U3RvcmFnZVJlc291cmNlc1NldDo6aXRlcmF0b3IgaXQgPSBtX2RvbVN0b3JhZ2VSZXNvdXJjZXMu
YmVnaW4oKTsgaXQgIT0gZG9tU3RvcmFnZUVuZDsgKytpdCkKKyAgICAgICAgaWYgKCgqaXQpLT5p
ZCgpID09IHN0b3JhZ2VJZCkKKyAgICAgICAgICAgIHJldHVybiBpdC0+Z2V0KCk7CisgICAgcmV0
dXJuIDA7Cit9CiAjZW5kaWYKIAogdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjptb3ZlV2luZG93
QnkoZmxvYXQgeCwgZmxvYXQgeSkgY29uc3QKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuaAppbmRleCBmM2UyMzBlLi4yMDI5NWFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oCkBAIC03NCw2ICs3NCw3IEBAIGNsYXNzIFJlc291cmNlRXJyb3I7CiBj
bGFzcyBTY3JpcHRDYWxsU3RhY2s7CiBjbGFzcyBTY3JpcHRTdHJpbmc7CiBjbGFzcyBTaGFyZWRC
dWZmZXI7CitjbGFzcyBTdG9yYWdlOwogY2xhc3MgU3RvcmFnZUFyZWE7CiAKIGNsYXNzIENvbnNv
bGVNZXNzYWdlOwpAQCAtMjMyLDYgKzIzMywxMCBAQCBwdWJsaWM6CiAjZW5kaWYKICNpZiBFTkFC
TEUoRE9NX1NUT1JBR0UpCiAgICAgdm9pZCBkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBz
dG9yYWdlQXJlYSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKTsKKyAgICB2b2lk
IHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7CisgICAgdm9pZCBnZXRET01TdG9y
YWdlRW50cmllcyhpbnQgY2FsbElkLCBpbnQgc3RvcmFnZUlkKTsKKyAgICB2b2lkIHNldERPTVN0
b3JhZ2VJdGVtKGxvbmcgY2FsbElkLCBsb25nIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0obG9u
ZyBjYWxsSWQsIGxvbmcgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSk7CiAjZW5kaWYKIAog
ICAgIGNvbnN0IFJlc291cmNlc01hcCYgcmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
dXJjZXM7IH0KQEAgLTMwMSw2ICszMDYsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgdG9nZ2xlUmVj
b3JkQnV0dG9uKGJvb2wpOwogICAgIHZvaWQgZW5hYmxlRGVidWdnZXJGcm9tRnJvbnRlbmQoYm9v
bCBhbHdheXMpOwogI2VuZGlmCisjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQorICAgIEluc3BlY3Rv
ckRPTVN0b3JhZ2VSZXNvdXJjZSogZ2V0RE9NU3RvcmFnZVJlc291cmNlRm9ySWQoaW50IHN0b3Jh
Z2VJZCk7CisjZW5kaWYKIAogICAgIHZvaWQgZm9jdXNOb2RlKCk7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5jcHAgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UuY3BwCmluZGV4IDJmNGFhNTMu
LmE3MjgzYTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3Jh
Z2VSZXNvdXJjZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFn
ZVJlc291cmNlLmNwcApAQCAtMzUsMjEgKzM1LDI3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9N
U3RvcmFnZVJlc291cmNlLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kLmgiCiAjaW5jbHVkZSAiU2NyaXB0T2JqZWN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0T2JqZWN0
UXVhcmFudGluZS5oIgogI2luY2x1ZGUgIlN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlRXZl
bnQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitp
bnQgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpzX25leHRVbnVzZWRJZCA9IDE7CisKIElu
c3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKFN0
b3JhZ2UqIGRvbVN0b3JhZ2UsIGJvb2wgaXNMb2NhbFN0b3JhZ2UsIEZyYW1lKiBmcmFtZSkKLSAg
ICA6IG1fZG9tU3RvcmFnZShkb21TdG9yYWdlKQorICAgIDogIEV2ZW50TGlzdGVuZXIoSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlVHlwZSkKKyAgICAsIG1fZG9tU3RvcmFnZShkb21TdG9yYWdl
KQogICAgICwgbV9pc0xvY2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkKICAgICAsIG1fZnJhbWUo
ZnJhbWUpCi0gICAgLCBtX3NjcmlwdE9iamVjdENyZWF0ZWQoZmFsc2UpCisgICAgLCBtX2Zyb250
ZW5kKDApCisgICAgLCBtX2lkKHNfbmV4dFVudXNlZElkKyspCisgICAgLCBtX3JlcG9ydGluZ0No
YW5nZXNUb0Zyb250ZW5kKGZhbHNlKQogewogfQogCkBAIC02MCwyMyArNjYsNDkgQEAgYm9vbCBJ
bnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6OmlzU2FtZUhvc3RBbmRUeXBlKEZyYW1lKiBmcmFt
ZSwgYm9vbCBpc0xvY2FsU3QKIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6OmJp
bmQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKQogewotICAgIGlmIChtX3NjcmlwdE9iamVj
dENyZWF0ZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fZnJvbnRlbmQpOworICAg
IG1fZnJvbnRlbmQgPSBmcm9udGVuZDsKIAogICAgIFNjcmlwdE9iamVjdCBqc29uT2JqZWN0ID0g
ZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwotICAgIFNjcmlwdE9iamVjdCBkb21TdG9yYWdl
OwotICAgIGlmICghZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QobV9kb21TdG9yYWdlLmdldCgp
LCBkb21TdG9yYWdlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGpzb25PYmplY3Quc2V0KCJkb21T
dG9yYWdlIiwgZG9tU3RvcmFnZSk7CiAgICAganNvbk9iamVjdC5zZXQoImhvc3QiLCBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5ob3N0KCkpOwogICAgIGpzb25PYmplY3Qu
c2V0KCJpc0xvY2FsU3RvcmFnZSIsIG1faXNMb2NhbFN0b3JhZ2UpOwotICAgIGlmIChmcm9udGVu
ZC0+YWRkRE9NU3RvcmFnZShqc29uT2JqZWN0KSkKLSAgICAgICAgbV9zY3JpcHRPYmplY3RDcmVh
dGVkID0gdHJ1ZTsKKyAgICBqc29uT2JqZWN0LnNldCgiaWQiLCBtX2lkKTsKKyAgICBmcm9udGVu
ZC0+YWRkRE9NU3RvcmFnZShqc29uT2JqZWN0KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlUmVzb3VyY2U6OnVuYmluZCgpCiB7Ci0gICAgbV9zY3JpcHRPYmplY3RDcmVhdGVkID0gZmFs
c2U7CisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAgIGlmIChtX3JlcG9ydGluZ0NoYW5nZXNU
b0Zyb250ZW5kKSB7CisgICAgICAgIG1fZnJhbWUtPmRvbVdpbmRvdygpLT5yZW1vdmVFdmVudExp
c3RlbmVyKGV2ZW50TmFtZXMoKS5zdG9yYWdlRXZlbnQsIHRoaXMsIHRydWUpOworICAgICAgICBt
X3JlcG9ydGluZ0NoYW5nZXNUb0Zyb250ZW5kID0gZmFsc2U7CisgICAgfQorICAgIG1fZnJvbnRl
bmQgPSAwOworfQorCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6c3RhcnRSZXBv
cnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCgpCit7CisgICAgQVNTRVJUKG1fZnJvbnRlbmQpOworICAg
IGlmICghbV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCkgeworICAgICAgICBtX2ZyYW1lLT5k
b21XaW5kb3coKS0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3RvcmFnZUV2ZW50LCB0
aGlzLCB0cnVlKTsKKyAgICAgICAgbV9yZXBvcnRpbmdDaGFuZ2VzVG9Gcm9udGVuZCA9IHRydWU7
CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTo6aGFuZGxlRXZl
bnQoRXZlbnQqIGV2ZW50LCBib29sKQoreworICAgIEFTU0VSVChtX2Zyb250ZW5kKTsKKyAgICBB
U1NFUlQoZXZlbnROYW1lcygpLnN0b3JhZ2VFdmVudCA9PSBldmVudC0+dHlwZSgpKTsKKyAgICBT
dG9yYWdlRXZlbnQqIHN0b3JhZ2VFdmVudCA9IHN0YXRpY19jYXN0PFN0b3JhZ2VFdmVudCo+KGV2
ZW50KTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gc3RvcmFnZUV2ZW50LT5zdG9yYWdlQXJlYSgp
OworICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBzdG9yYWdlRXZlbnQtPnNvdXJjZSgpLT5sb2Nh
bFN0b3JhZ2UoKSA9PSBzdG9yYWdlOworICAgIGlmIChpc1NhbWVIb3N0QW5kVHlwZShzdG9yYWdl
LT5mcmFtZSgpLCBpc0xvY2FsU3RvcmFnZSkpCisgICAgICAgIG1fZnJvbnRlbmQtPnVwZGF0ZURP
TVN0b3JhZ2UobV9pZCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOjpv
cGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyKQoreworICAgIHJldHVybiAo
dGhpcyA9PSBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2U6OmNhc3QoJmxpc3RlbmVyKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlLmgKaW5kZXggM2UwNTg5Ny4uNDgzYzk4ZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlLmgKQEAgLTMzLDYg
KzMzLDcgQEAKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKIAorI2luY2x1ZGUgIkV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0
ZS5oIgogCkBAIC00NiwxNyArNDcsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEZyYW1lOwogICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogCi0gICAgY2xhc3MgSW5zcGVj
dG9yRE9NU3RvcmFnZVJlc291cmNlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlPiB7CisgICAgY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlIDog
cHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlPiBjcmVhdGUoU3RvcmFnZSogZG9tU3Rv
cmFnZSwgYm9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZShk
b21TdG9yYWdlLCBpc0xvY2FsU3RvcmFnZSwgZnJhbWUpKTsKICAgICAgICAgfQorICAgICAgICBz
dGF0aWMgY29uc3QgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBjYXN0KGNvbnN0IEV2ZW50
TGlzdGVuZXIqIGxpc3RlbmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbGlzdGVu
ZXItPnR5cGUoKSA9PSBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2VUeXBlID8gc3RhdGljX2Nh
c3Q8Y29uc3QgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKj4obGlzdGVuZXIpIDogMDsKKyAg
ICAgICAgfQogCiAgICAgICAgIHZvaWQgYmluZChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
OwogICAgICAgICB2b2lkIHVuYmluZCgpOworICAgICAgICB2b2lkIHN0YXJ0UmVwb3J0aW5nQ2hh
bmdlc1RvRnJvbnRlbmQoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZl
bnQqLCBib29sIGlzV2luZG93RXZlbnQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lcik7CiAKICAgICAgICAgYm9vbCBpc1NhbWVI
b3N0QW5kVHlwZShGcmFtZSosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpIGNvbnN0OworICAgICAgICBs
b25nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBTdG9yYWdlKiBkb21TdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9kb21TdG9yYWdlLmdldCgpOyB9CiAKICAgICBwcml2YXRl
OgogCkBAIC02NSw4ICs3NiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFJlZlB0
cjxTdG9yYWdlPiBtX2RvbVN0b3JhZ2U7CiAgICAgICAgIGJvb2wgbV9pc0xvY2FsU3RvcmFnZTsK
ICAgICAgICAgUmVmUHRyPEZyYW1lPiBtX2ZyYW1lOwotICAgICAgICBib29sIG1fc2NyaXB0T2Jq
ZWN0Q3JlYXRlZDsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAg
ICAgIGludCBtX2lkOworICAgICAgICBib29sIG1fcmVwb3J0aW5nQ2hhbmdlc1RvRnJvbnRlbmQ7
CiAKKyAgICAgICAgc3RhdGljIGludCBzX25leHRVbnVzZWRJZDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5jcHAKaW5k
ZXggYzhhMmY1Yy4uYzk3OTNjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
LmNwcApAQCAtMzk5LDEzICszOTksNDEgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6c2VsZWN0
RGF0YWJhc2UoRGF0YWJhc2UqIGRhdGFiYXNlKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCi12b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZWxlY3RET01TdG9yYWdlKFN0b3JhZ2Uq
IHN0b3JhZ2UpCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjpzZWxlY3RET01TdG9yYWdlKGludCBz
dG9yYWdlSWQpCiB7CiAgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24obmV3
RnVuY3Rpb25DYWxsKCJzZWxlY3RET01TdG9yYWdlIikpOwotICAgIFNjcmlwdE9iamVjdCBxdWFy
YW50aW5lZE9iamVjdDsKLSAgICBpZiAoIWdldFF1YXJhbnRpbmVkU2NyaXB0T2JqZWN0KHN0b3Jh
Z2UsIHF1YXJhbnRpbmVkT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZ1bmN0aW9uLT5h
cHBlbmRBcmd1bWVudChxdWFyYW50aW5lZE9iamVjdCk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFy
Z3VtZW50KHN0b3JhZ2VJZCk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6ZGlkR2V0RE9NU3RvcmFnZUVudHJpZXMoaW50IGNhbGxJZCwgY29uc3Qg
U2NyaXB0QXJyYXkmIGVudHJpZXMpCit7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4g
ZnVuY3Rpb24obmV3RnVuY3Rpb25DYWxsKCJkaWRHZXRET01TdG9yYWdlRW50cmllcyIpKTsKKyAg
ICBmdW5jdGlvbi0+YXBwZW5kQXJndW1lbnQoY2FsbElkKTsKKyAgICBmdW5jdGlvbi0+YXBwZW5k
QXJndW1lbnQoZW50cmllcyk7CisgICAgZnVuY3Rpb24tPmNhbGwoKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JGcm9udGVuZDo6ZGlkU2V0RE9NU3RvcmFnZUl0ZW0oaW50IGNhbGxJZCwgYm9vbCBzdWNj
ZXNzKQoreworICAgIE93blB0cjxTY3JpcHRGdW5jdGlvbkNhbGw+IGZ1bmN0aW9uKG5ld0Z1bmN0
aW9uQ2FsbCgiZGlkU2V0RE9NU3RvcmFnZUl0ZW0iKSk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFy
Z3VtZW50KGNhbGxJZCk7CisgICAgZnVuY3Rpb24tPmFwcGVuZEFyZ3VtZW50KHN1Y2Nlc3MpOwor
ICAgIGZ1bmN0aW9uLT5jYWxsKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OmRpZFJl
bW92ZURPTVN0b3JhZ2VJdGVtKGludCBjYWxsSWQsIGJvb2wgc3VjY2VzcykKK3sKKyAgICBPd25Q
dHI8U2NyaXB0RnVuY3Rpb25DYWxsPiBmdW5jdGlvbihuZXdGdW5jdGlvbkNhbGwoImRpZFJlbW92
ZURPTVN0b3JhZ2VJdGVtIikpOworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChjYWxsSWQp
OworICAgIGZ1bmN0aW9uLT5hcHBlbmRBcmd1bWVudChzdWNjZXNzKTsKKyAgICBmdW5jdGlvbi0+
Y2FsbCgpOworfQorCit2b2lkIEluc3BlY3RvckZyb250ZW5kOjp1cGRhdGVET01TdG9yYWdlKGlu
dCBzdG9yYWdlSWQpCit7CisgICAgT3duUHRyPFNjcmlwdEZ1bmN0aW9uQ2FsbD4gZnVuY3Rpb24o
bmV3RnVuY3Rpb25DYWxsKCJ1cGRhdGVET01TdG9yYWdlIikpOworICAgIGZ1bmN0aW9uLT5hcHBl
bmRBcmd1bWVudChzdG9yYWdlSWQpOwogICAgIGZ1bmN0aW9uLT5jYWxsKCk7CiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmggYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZC5oCmluZGV4IDQyNzY4ZTYuLmY5ZDNiYTEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kLmgKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmQuaApAQCAtOTksNyArOTksMTEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAg
ICAgICAgIGJvb2wgYWRkRE9NU3RvcmFnZShjb25zdCBTY3JpcHRPYmplY3QmIGRvbVN0b3JhZ2VP
YmopOwotICAgICAgICB2b2lkIHNlbGVjdERPTVN0b3JhZ2UoU3RvcmFnZSogc3RvcmFnZSk7Cisg
ICAgICAgIHZvaWQgc2VsZWN0RE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKKyAgICAgICAgdm9p
ZCBkaWRHZXRET01TdG9yYWdlRW50cmllcyhpbnQgY2FsbElkLCBjb25zdCBTY3JpcHRBcnJheSYg
ZW50cmllcyk7CisgICAgICAgIHZvaWQgZGlkU2V0RE9NU3RvcmFnZUl0ZW0oaW50IGNhbGxJZCwg
Ym9vbCBzdWNjZXNzKTsKKyAgICAgICAgdm9pZCBkaWRSZW1vdmVET01TdG9yYWdlSXRlbShpbnQg
Y2FsbElkLCBib29sIHN1Y2Nlc3MpOworICAgICAgICB2b2lkIHVwZGF0ZURPTVN0b3JhZ2UoaW50
IHN0b3JhZ2VJZCk7CiAjZW5kaWYKIAogICAgICAgICB2b2lkIHNldERvY3VtZW50KGNvbnN0IFNj
cmlwdE9iamVjdCYgcm9vdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRE9NU3RvcmFnZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdl
LmpzCmluZGV4IDUyMDdiNjkuLjAzYTEwYmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9ET01TdG9yYWdlLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01TdG9yYWdlLmpzCkBAIC0yNiwyNCArMjYsMjIgQEAKICAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
V2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UgPSBmdW5jdGlvbihkb21TdG9yYWdlLCBkb21haW4sIGlz
TG9jYWxTdG9yYWdlKQorV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2UgPSBmdW5jdGlvbihpZCwgZG9t
YWluLCBpc0xvY2FsU3RvcmFnZSkKIHsKLSAgICB0aGlzLmRvbVN0b3JhZ2UgPSBkb21TdG9yYWdl
OwotICAgIHRoaXMuZG9tYWluID0gZG9tYWluOwotICAgIHRoaXMuaXNMb2NhbFN0b3JhZ2UgPSBp
c0xvY2FsU3RvcmFnZTsKKyAgICB0aGlzLl9pZCA9IGlkOworICAgIHRoaXMuX2RvbWFpbiA9IGRv
bWFpbjsKKyAgICB0aGlzLl9pc0xvY2FsU3RvcmFnZSA9IGlzTG9jYWxTdG9yYWdlOwogfQogCiBX
ZWJJbnNwZWN0b3IuRE9NU3RvcmFnZS5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGRvbVN0b3JhZ2Uo
KQorICAgIGdldCBpZCgpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZG9tU3RvcmFnZTsK
KyAgICAgICAgcmV0dXJuIHRoaXMuX2lkOwogICAgIH0sCiAKLSAgICBzZXQgZG9tU3RvcmFnZSh4
KQorICAgIGdldCBkb21TdG9yYWdlKCkKICAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9kb21TdG9y
YWdlID09PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9kb21TdG9yYWdl
ID0geDsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2RvbVN0b3JhZ2U7CiAgICAgfSwKIAogICAgIGdl
dCBkb21haW4oKQpAQCAtNTEsMjIgKzQ5LDMwIEBAIFdlYkluc3BlY3Rvci5ET01TdG9yYWdlLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2RvbWFpbjsKICAgICB9LAogCi0gICAg
c2V0IGRvbWFpbih4KQorICAgIGdldCBpc0xvY2FsU3RvcmFnZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5faXNMb2NhbFN0b3JhZ2U7CisgICAgfSwKKworICAgIGdldEVudHJpZXM6IGZ1
bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2RvbWFpbiA9PT0geCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fZG9tYWluID0geDsKKyAgICAgICAg
dmFyIGNhbGxJZCA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKTsKKyAgICAg
ICAgSW5zcGVjdG9yQ29udHJvbGxlci5nZXRET01TdG9yYWdlRW50cmllcyhjYWxsSWQsIHRoaXMu
X2lkKTsKICAgICB9LAogICAgIAotICAgIGdldCBpc0xvY2FsU3RvcmFnZSgpCisgICAgc2V0SXRl
bTogZnVuY3Rpb24oa2V5LCB2YWx1ZSwgY2FsbGJhY2spCiAgICAgewotICAgICAgICByZXR1cm4g
dGhpcy5faXNMb2NhbFN0b3JhZ2U7CisgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3Iu
Q2FsbGJhY2sud3JhcChjYWxsYmFjayk7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIuc2V0
RE9NU3RvcmFnZUl0ZW0oY2FsbElkLCB0aGlzLl9pZCwga2V5LCB2YWx1ZSk7CiAgICAgfSwKICAg
ICAKLSAgICBzZXQgaXNMb2NhbFN0b3JhZ2UoeCkKKyAgICByZW1vdmVJdGVtOiBmdW5jdGlvbihr
ZXksIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX2lzTG9jYWxTdG9yYWdlID09
PSB4KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLl9pc0xvY2FsU3RvcmFnZSA9
IHg7CisgICAgICAgIHZhciBjYWxsSWQgPSBXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3JhcChjYWxs
YmFjayk7CisgICAgICAgIEluc3BlY3RvckNvbnRyb2xsZXIucmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
Y2FsbElkLCB0aGlzLl9pZCwga2V5KTsKICAgICB9CiB9CisKK1dlYkluc3BlY3Rvci5kaWRHZXRE
T01TdG9yYWdlRW50cmllcyA9IFdlYkluc3BlY3Rvci5DYWxsYmFjay5wcm9jZXNzQ2FsbGJhY2s7
CitXZWJJbnNwZWN0b3IuZGlkU2V0RE9NU3RvcmFnZUl0ZW0gPSBXZWJJbnNwZWN0b3IuQ2FsbGJh
Y2sucHJvY2Vzc0NhbGxiYWNrOworV2ViSW5zcGVjdG9yLmRpZFJlbW92ZURPTVN0b3JhZ2VJdGVt
ID0gV2ViSW5zcGVjdG9yLkNhbGxiYWNrLnByb2Nlc3NDYWxsYmFjazsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlRGF0YUdyaWQuanMgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRE9NU3RvcmFnZURhdGFHcmlkLmpzCmluZGV4IGVmZGQwOTAu
LjQ1YTliYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9y
YWdlRGF0YUdyaWQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTVN0b3Jh
Z2VEYXRhR3JpZC5qcwpAQCAtMjMsMTAgKzIzLDEyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LVdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQgPSBmdW5jdGlvbihjb2x1bW5zKQorV2Vi
SW5zcGVjdG9yLkRPTVN0b3JhZ2VEYXRhR3JpZCA9IGZ1bmN0aW9uKGNvbHVtbnMsIGRvbVN0b3Jh
Z2UsIGtleXMpCiB7CiAgICAgV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNhbGwodGhpcywgY29sdW1u
cyk7CiAgICAgdGhpcy5kYXRhVGFibGVCb2R5LmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIiwg
dGhpcy5fb25kYmxjbGljay5iaW5kKHRoaXMpLCBmYWxzZSk7CisgICAgdGhpcy5fZG9tU3RvcmFn
ZSA9IGRvbVN0b3JhZ2U7CisgICAgdGhpcy5fa2V5cyA9IGtleXM7CiB9CiAKIFdlYkluc3BlY3Rv
ci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90eXBlID0gewpAQCAtNDQsNyArNDYsNiBAQCBXZWJJ
bnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5f
ZWRpdGluZyA9IHRydWU7CiAgICAgICAgIHRoaXMuX2VkaXRpbmdOb2RlID0gbm9kZTsKICAgICAg
ICAgdGhpcy5fZWRpdGluZ05vZGUuc2VsZWN0KCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5l
bHMuc3RvcmFnZS5fdW5yZWdpc3RlclN0b3JhZ2VFdmVudExpc3RlbmVyKCk7CiAKICAgICAgICAg
dmFyIGVsZW1lbnQgPSB0aGlzLl9lZGl0aW5nTm9kZS5fZWxlbWVudC5jaGlsZHJlbltjb2x1bW5d
OwogICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGVsZW1lbnQsIHRoaXMuX2VkaXRp
bmdDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMp
LCBlbGVtZW50LnRleHRDb250ZW50KTsKQEAgLTY5LDcgKzcwLDYgQEAgV2ViSW5zcGVjdG9yLkRP
TVN0b3JhZ2VEYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gdGhpcy5f
c3RhcnRFZGl0aW5nQ29sdW1uT2ZEYXRhR3JpZE5vZGUodGhpcy5fZWRpdGluZ05vZGUsIDApOwog
CiAgICAgICAgIHRoaXMuX2VkaXRpbmcgPSB0cnVlOwotICAgICAgICBXZWJJbnNwZWN0b3IucGFu
ZWxzLnN0b3JhZ2UuX3VucmVnaXN0ZXJTdG9yYWdlRXZlbnRMaXN0ZW5lcigpOwogICAgICAgICBX
ZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGVsZW1lbnQsIHRoaXMuX2VkaXRpbmdDb21taXR0ZWQu
YmluZCh0aGlzKSwgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBlbGVtZW50LnRl
eHRDb250ZW50KTsKICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRl
bnQoZWxlbWVudCwgMCwgZWxlbWVudCwgMSk7CiAgICAgfSwKQEAgLTExOCwyMiArMTE4LDIwIEBA
IFdlYkluc3BlY3Rvci5ET01TdG9yYWdlRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSBXZWJJbnNw
ZWN0b3IucGFuZWxzLnN0b3JhZ2UudmlzaWJsZVZpZXcuZG9tU3RvcmFnZS5kb21TdG9yYWdlOwot
ICAgICAgICBpZiAoZG9tU3RvcmFnZSkgewotICAgICAgICAgICAgaWYgKGNvbHVtbklkZW50aWZp
ZXIgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChkb21TdG9yYWdlLmdldEl0ZW0obmV3VGV4
dCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0g
dGhpcy5fZWRpdGluZ05vZGUuZGF0YVswXTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRp
dGluZ0NhbmNlbGxlZChlbGVtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbW92ZVRvTmV4dElm
TmVlZGVkLmNhbGwodGhpcywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRvbVN0b3JhZ2UucmVtb3ZlSXRlbSh0
aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzBdKTsKLSAgICAgICAgICAgICAgICBkb21TdG9yYWdlLnNl
dEl0ZW0obmV3VGV4dCwgdGhpcy5fZWRpdGluZ05vZGUuZGF0YVsxXSk7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fZWRpdGluZ05vZGUuZGF0YVswXSA9IG5ld1RleHQ7ICAgICAgICAgICAgCi0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRvbVN0b3JhZ2Uuc2V0SXRlbSh0aGlz
Ll9lZGl0aW5nTm9kZS5kYXRhWzBdLCBuZXdUZXh0KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9l
ZGl0aW5nTm9kZS5kYXRhWzFdID0gbmV3VGV4dDsKKyAgICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0
aGlzLl9kb21TdG9yYWdlOworICAgICAgICBpZiAoY29sdW1uSWRlbnRpZmllciA9PT0gMCkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2tleXMuaW5kZXhPZihuZXdUZXh0KSAhPT0gLTEpIHsKKyAg
ICAgICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5fZWRpdGluZ05vZGUuZGF0
YVswXTsKKyAgICAgICAgICAgICAgICB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkKGVsZW1lbnQpOwor
ICAgICAgICAgICAgICAgIG1vdmVUb05leHRJZk5lZWRlZC5jYWxsKHRoaXMsIGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBkb21TdG9y
YWdlLnJlbW92ZUl0ZW0odGhpcy5fZWRpdGluZ05vZGUuZGF0YVswXSk7CisgICAgICAgICAgICBk
b21TdG9yYWdlLnNldEl0ZW0obmV3VGV4dCwgdGhpcy5fZWRpdGluZ05vZGUuZGF0YVsxXSk7Cisg
ICAgICAgICAgICB0aGlzLl9lZGl0aW5nTm9kZS5kYXRhWzBdID0gbmV3VGV4dDsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGRvbVN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9lZGl0aW5nTm9k
ZS5kYXRhWzBdLCBuZXdUZXh0KTsKKyAgICAgICAgICAgIHRoaXMuX2VkaXRpbmdOb2RlLmRhdGFb
MV0gPSBuZXdUZXh0OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHRoaXMuX2VkaXRpbmdOb2Rl
LmlzQ3JlYXRpb25Ob2RlKQpAQCAtMTQ3LDE4ICsxNDUsMTYgQEAgV2ViSW5zcGVjdG9yLkRPTVN0
b3JhZ2VEYXRhR3JpZC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBkZWxldGUgdGhpcy5f
ZWRpdGluZzsKICAgICAgICAgdGhpcy5fZWRpdGluZ05vZGUgPSBudWxsOwotICAgICAgICBXZWJJ
bnNwZWN0b3IucGFuZWxzLnN0b3JhZ2UuX3JlZ2lzdGVyU3RvcmFnZUV2ZW50TGlzdGVuZXIoKTsK
ICAgICB9LAogCiAgICAgZGVsZXRlU2VsZWN0ZWRSb3c6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIHZhciBub2RlID0gdGhpcy5zZWxlY3RlZE5vZGU7Ci0gICAgICAgIGlmICh0aGlzLnNlbGVj
dGVkTm9kZS5pc0NyZWF0aW9uTm9kZSkKKyAgICAgICAgaWYgKCFub2RlIHx8IG5vZGUuaXNDcmVh
dGlvbk5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIGRvbVN0b3JhZ2Ug
PSBXZWJJbnNwZWN0b3IucGFuZWxzLnN0b3JhZ2UudmlzaWJsZVZpZXcuZG9tU3RvcmFnZS5kb21T
dG9yYWdlOwotICAgICAgICBpZiAobm9kZSAmJiBkb21TdG9yYWdlKQotICAgICAgICAgICAgZG9t
U3RvcmFnZS5yZW1vdmVJdGVtKG5vZGUuZGF0YVswXSk7CisgICAgICAgIGlmICh0aGlzLl9kb21T
dG9yYWdlKQorICAgICAgICAgICAgdGhpcy5fZG9tU3RvcmFnZS5yZW1vdmVJdGVtKG5vZGUuZGF0
YVswXSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRE9NU3RvcmFnZUl0ZW1zVmlldy5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9E
T01TdG9yYWdlSXRlbXNWaWV3LmpzCmluZGV4IDg2MTdkNjAuLmE3ZGEzNzAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01TdG9yYWdlSXRlbXNWaWV3LmpzCkBAIC02
MSwzOSArNjEsODggQEAgV2ViSW5zcGVjdG9yLkRPTVN0b3JhZ2VJdGVtc1ZpZXcucHJvdG90eXBl
ID0gewogICAgIHVwZGF0ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdGhpcy5lbGVtZW50
LnJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgICAgIHZhciBoYXNET01TdG9yYWdlID0gdGhpcy5kb21T
dG9yYWdlOwotICAgICAgICBpZiAoaGFzRE9NU3RvcmFnZSkKLSAgICAgICAgICAgIGhhc0RPTVN0
b3JhZ2UgPSB0aGlzLmRvbVN0b3JhZ2UuZG9tU3RvcmFnZTsKLQotICAgICAgICBpZiAoaGFzRE9N
U3RvcmFnZSkgewotICAgICAgICAgICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLnBhbmVs
cy5zdG9yYWdlLmRhdGFHcmlkRm9yRE9NU3RvcmFnZSh0aGlzLmRvbVN0b3JhZ2UuZG9tU3RvcmFn
ZSk7Ci0gICAgICAgICAgICBpZiAoIWRhdGFHcmlkKQotICAgICAgICAgICAgICAgIGhhc0RPTVN0
b3JhZ2UgPSAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGF0
YUdyaWQgPSBkYXRhR3JpZDsKLSAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hp
bGQoZGF0YUdyaWQuZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQudXBk
YXRlV2lkdGhzKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVCdXR0b24udmlzaWJsZSA9
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgdmFyIGNhbGxiYWNrID0g
dGhpcy5fc2hvd0RPTVN0b3JhZ2VFbnRyaWVzLmJpbmQodGhpcyk7CisgICAgICAgIHRoaXMuZG9t
U3RvcmFnZS5nZXRFbnRyaWVzKGNhbGxiYWNrKTsKKyAgICB9LAogCi0gICAgICAgIGlmICghaGFz
RE9NU3RvcmFnZSkgeworICAgIF9zaG93RE9NU3RvcmFnZUVudHJpZXM6IGZ1bmN0aW9uKGVudHJp
ZXMpIAorICAgIHsKKyAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkgeworICAgICAgICAg
ICAgdGhpcy5fZGF0YUdyaWQgPSB0aGlzLl9kYXRhR3JpZEZvckRPTVN0b3JhZ2VFbnRyaWVzKGVu
dHJpZXMpOworICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2RhdGFH
cmlkLmVsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fZGF0YUdyaWQudXBkYXRlV2lkdGhzKCk7
CisgICAgICAgICAgICB0aGlzLmRlbGV0ZUJ1dHRvbi52aXNpYmxlID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIHZhciBlbXB0eU1zZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgIGVtcHR5TXNnRWxlbWVudC5jbGFzc05hbWUg
PSAic3RvcmFnZS10YWJsZS1lbXB0eSI7CiAgICAgICAgICAgICBpZiAodGhpcy5kb21TdG9yYWdl
KQotICAgICAgICAgICAgZW1wdHlNc2dFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJUaGlzIHN0b3JhZ2UgaXMgZW1wdHkuIik7CisgICAgICAgICAgICAgICAgZW1w
dHlNc2dFbGVtZW50LnRleHRDb250ZW50ID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaGlzIHN0
b3JhZ2UgaXMgZW1wdHkuIik7CiAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQo
ZW1wdHlNc2dFbGVtZW50KTsKICAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkID0gbnVsbDsKICAg
ICAgICAgICAgIHRoaXMuZGVsZXRlQnV0dG9uLnZpc2libGUgPSBmYWxzZTsKICAgICAgICAgfQog
ICAgIH0sCi0gICAgCisKICAgICByZXNpemU6IGZ1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9kYXRhR3JpZCkKICAgICAgICAgICAgIHRoaXMuX2RhdGFHcmlkLnVwZGF0ZVdpZHRo
cygpOwogICAgIH0sCiAKKyAgICBfZGF0YUdyaWRGb3JET01TdG9yYWdlRW50cmllczogZnVuY3Rp
b24oZW50cmllcykKKyAgICB7CisgICAgICAgIHZhciBjb2x1bW5zID0ge307CisgICAgICAgIGNv
bHVtbnNbMF0gPSB7fTsKKyAgICAgICAgY29sdW1uc1sxXSA9IHt9OworICAgICAgICBjb2x1bW5z
WzBdLnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJLZXkiKTsKKyAgICAgICAgY29sdW1u
c1swXS53aWR0aCA9IGNvbHVtbnNbMF0udGl0bGUubGVuZ3RoOworICAgICAgICBjb2x1bW5zWzFd
LnRpdGxlID0gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJWYWx1ZSIpOworICAgICAgICBjb2x1bW5z
WzFdLndpZHRoID0gY29sdW1uc1sxXS50aXRsZS5sZW5ndGg7CisKKyAgICAgICAgdmFyIG5vZGVz
ID0gW107CisKKyAgICAgICAgdmFyIGtleXMgPSBbXTsKKyAgICAgICAgdmFyIGxlbmd0aCA9IGVu
dHJpZXMubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgIHZhciBkYXRhID0ge307CisKKyAgICAgICAgICAgIHZhciBr
ZXkgPSBlbnRyaWVzW2ldWzBdOworICAgICAgICAgICAgZGF0YVswXSA9IGtleTsKKyAgICAgICAg
ICAgIGlmIChrZXkubGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkKKyAgICAgICAgICAgICAgICBj
b2x1bW5zWzBdLndpZHRoID0ga2V5Lmxlbmd0aDsKKworICAgICAgICAgICAgdmFyIHZhbHVlID0g
ZW50cmllc1tpXVsxXTsKKyAgICAgICAgICAgIGRhdGFbMV0gPSB2YWx1ZTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5sZW5ndGggPiBjb2x1bW5zWzFdLndpZHRoKQorICAgICAgICAgICAgICAgIGNv
bHVtbnNbMV0ud2lkdGggPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICB2YXIgbm9kZSA9IG5l
dyBXZWJJbnNwZWN0b3IuRGF0YUdyaWROb2RlKGRhdGEsIGZhbHNlKTsKKyAgICAgICAgICAgIG5v
ZGUuc2VsZWN0YWJsZSA9IHRydWU7CisgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAg
ICAgICAgICAga2V5cy5wdXNoKGtleSk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgdG90YWxD
b2x1bW5XaWR0aHMgPSBjb2x1bW5zWzBdLndpZHRoICsgY29sdW1uc1sxXS53aWR0aDsKKyAgICAg
ICAgdmFyIHdpZHRoID0gTWF0aC5yb3VuZCgoY29sdW1uc1swXS53aWR0aCAqIDEwMCkgLyB0b3Rh
bENvbHVtbldpZHRocyk7CisgICAgICAgIGNvbnN0IG1pbmltdW1QcmVjZW50ID0gMTA7CisgICAg
ICAgIGlmICh3aWR0aCA8IG1pbmltdW1QcmVjZW50KQorICAgICAgICAgICAgd2lkdGggPSBtaW5p
bXVtUHJlY2VudDsKKyAgICAgICAgaWYgKHdpZHRoID4gMTAwIC0gbWluaW11bVByZWNlbnQpCisg
ICAgICAgICAgICB3aWR0aCA9IDEwMCAtIG1pbmltdW1QcmVjZW50OworICAgICAgICBjb2x1bW5z
WzBdLndpZHRoID0gd2lkdGg7CisgICAgICAgIGNvbHVtbnNbMV0ud2lkdGggPSAxMDAgLSB3aWR0
aDsKKyAgICAgICAgY29sdW1uc1swXS53aWR0aCArPSAiJSI7CisgICAgICAgIGNvbHVtbnNbMV0u
d2lkdGggKz0gIiUiOworCisgICAgICAgIHZhciBkYXRhR3JpZCA9IG5ldyBXZWJJbnNwZWN0b3Iu
RE9NU3RvcmFnZURhdGFHcmlkKGNvbHVtbnMsIHRoaXMuZG9tU3RvcmFnZSwga2V5cyk7CisgICAg
ICAgIHZhciBsZW5ndGggPSBub2Rlcy5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkYXRhR3JpZC5hcHBlbmRDaGlsZChub2Rlc1tp
XSk7CisgICAgICAgIGRhdGFHcmlkLmFkZENyZWF0aW9uTm9kZShmYWxzZSk7CisgICAgICAgIGlm
IChsZW5ndGggPiAwKQorICAgICAgICAgICAgbm9kZXNbMF0uc2VsZWN0ZWQgPSB0cnVlOworICAg
ICAgICByZXR1cm4gZGF0YUdyaWQ7CisgICAgfSwKKwogICAgIF9kZWxldGVCdXR0b25DbGlja2Vk
OiBmdW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLl9kYXRhR3JpZCkgewpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0b3JhZ2VQYW5lbC5qcyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdG9yYWdlUGFuZWwuanMKaW5kZXggYWVkMGQw
Ni4uMDFjNjU3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0b3Jh
Z2VQYW5lbC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3RvcmFnZVBhbmVs
LmpzCkBAIC05Myw3ICs5Myw2IEBAIFdlYkluc3BlY3Rvci5TdG9yYWdlUGFuZWwucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLlBhbmVsLnByb3RvdHlwZS5zaG93LmNh
bGwodGhpcyk7CiAgICAgICAgIHRoaXMuX3VwZGF0ZVNpZGViYXJXaWR0aCgpOwotICAgICAgICB0
aGlzLl9yZWdpc3RlclN0b3JhZ2VFdmVudExpc3RlbmVyKCk7CiAgICAgfSwKIAogICAgIHJlc2V0
OiBmdW5jdGlvbigpCkBAIC0xMTAsOCArMTA5LDYgQEAgV2ViSW5zcGVjdG9yLlN0b3JhZ2VQYW5l
bC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGhpcy5fZGF0YWJhc2VzID0gW107CiAKLSAgICAg
ICAgdGhpcy5fdW5yZWdpc3RlclN0b3JhZ2VFdmVudExpc3RlbmVyKCk7Ci0KICAgICAgICAgaWYg
KHRoaXMuX2RvbVN0b3JhZ2UpIHsKICAgICAgICAgICAgIHZhciBkb21TdG9yYWdlTGVuZ3RoID0g
dGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7CiAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGRvbVN0b3JhZ2VMZW5ndGg7ICsraSkgewpAQCAtMTc0LDE2ICsxNzEsMTIgQEAgV2ViSW5zcGVj
dG9yLlN0b3JhZ2VQYW5lbC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAgICB9LAogCi0gICAg
c2VsZWN0RE9NU3RvcmFnZTogZnVuY3Rpb24ocykKKyAgICBzZWxlY3RET01TdG9yYWdlOiBmdW5j
dGlvbihzdG9yYWdlSWQpCiAgICAgewotICAgICAgICB2YXIgaXNMb2NhbFN0b3JhZ2UgPSAocyA9
PT0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKS5sb2NhbFN0b3JhZ2UpOwot
ICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7IGkg
PCBsZW47ICsraSkgewotICAgICAgICAgICAgdmFyIHN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdl
W2ldOwotICAgICAgICAgICAgaWYgKCBpc0xvY2FsU3RvcmFnZSA9PT0gc3RvcmFnZS5pc0xvY2Fs
U3RvcmFnZSApIHsKLSAgICAgICAgICAgICAgICB0aGlzLnNob3dET01TdG9yYWdlKHN0b3JhZ2Up
OwotICAgICAgICAgICAgICAgIHN0b3JhZ2UuX2RvbVN0b3JhZ2VUcmVlRWxlbWVudC5zZWxlY3Qo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIHZhciBk
b21TdG9yYWdlID0gdGhpcy5fZG9tU3RvcmFnZUZvcklkKHN0b3JhZ2VJZCk7CisgICAgICAgIGlm
IChkb21TdG9yYWdlKSB7CisgICAgICAgICAgICB0aGlzLnNob3dET01TdG9yYWdlKGRvbVN0b3Jh
Z2UpOworICAgICAgICAgICAgZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVRyZWVFbGVtZW50LnNlbGVj
dCgpOwogICAgICAgICB9CiAgICAgfSwKIApAQCAtMzgzLDYxICszNzYsNiBAQCBXZWJJbnNwZWN0
b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGRhdGFHcmlkOwog
ICAgIH0sCiAKLSAgICBkYXRhR3JpZEZvckRPTVN0b3JhZ2U6IGZ1bmN0aW9uKGRvbVN0b3JhZ2Up
Ci0gICAgewotICAgICAgICBpZiAoIWRvbVN0b3JhZ2UubGVuZ3RoKQotICAgICAgICAgICAgcmV0
dXJuIG51bGw7Ci0KLSAgICAgICAgdmFyIGNvbHVtbnMgPSB7fTsKLSAgICAgICAgY29sdW1uc1sw
XSA9IHt9OwotICAgICAgICBjb2x1bW5zWzFdID0ge307Ci0gICAgICAgIGNvbHVtbnNbMF0udGl0
bGUgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIktleSIpOwotICAgICAgICBjb2x1bW5zWzBdLndp
ZHRoID0gY29sdW1uc1swXS50aXRsZS5sZW5ndGg7Ci0gICAgICAgIGNvbHVtbnNbMV0udGl0bGUg
PSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIik7Ci0gICAgICAgIGNvbHVtbnNbMV0ud2lk
dGggPSBjb2x1bW5zWzFdLnRpdGxlLmxlbmd0aDsKLQotICAgICAgICB2YXIgbm9kZXMgPSBbXTsK
LSAgICAgICAgCi0gICAgICAgIHZhciBsZW5ndGggPSBkb21TdG9yYWdlLmxlbmd0aDsKLSAgICAg
ICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGRvbVN0b3JhZ2UubGVuZ3RoOyBpbmRleCsr
KSB7Ci0gICAgICAgICAgICB2YXIgZGF0YSA9IHt9OwotICAgICAgIAotICAgICAgICAgICAgdmFy
IGtleSA9IFN0cmluZyhkb21TdG9yYWdlLmtleShpbmRleCkpOwotICAgICAgICAgICAgZGF0YVsw
XSA9IGtleTsKLSAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID4gY29sdW1uc1swXS53aWR0aCkK
LSAgICAgICAgICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0ga2V5Lmxlbmd0aDsKLSAgICAgICAg
Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBTdHJpbmcoZG9tU3RvcmFnZS5nZXRJdGVtKGtleSkp
OwotICAgICAgICAgICAgZGF0YVsxXSA9IHZhbHVlOwotICAgICAgICAgICAgaWYgKHZhbHVlLmxl
bmd0aCA+IGNvbHVtbnNbMV0ud2lkdGgpCi0gICAgICAgICAgICAgICAgY29sdW1uc1sxXS53aWR0
aCA9IHZhbHVlLmxlbmd0aDsKLSAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rv
ci5EYXRhR3JpZE5vZGUoZGF0YSwgZmFsc2UpOwotICAgICAgICAgICAgbm9kZS5zZWxlY3RhYmxl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2YXIgdG90YWxDb2x1bW5XaWR0aHMgPSBjb2x1bW5zWzBdLndpZHRoICsgY29sdW1uc1sx
XS53aWR0aDsKLSAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5yb3VuZCgoY29sdW1uc1swXS53aWR0
aCAqIDEwMCkgLyB0b3RhbENvbHVtbldpZHRocyk7Ci0gICAgICAgIGNvbnN0IG1pbmltdW1QcmVj
ZW50ID0gMTA7Ci0gICAgICAgIGlmICh3aWR0aCA8IG1pbmltdW1QcmVjZW50KQotICAgICAgICAg
ICAgd2lkdGggPSBtaW5pbXVtUHJlY2VudDsKLSAgICAgICAgaWYgKHdpZHRoID4gMTAwIC0gbWlu
aW11bVByZWNlbnQpCi0gICAgICAgICAgICB3aWR0aCA9IDEwMCAtIG1pbmltdW1QcmVjZW50Owot
ICAgICAgICBjb2x1bW5zWzBdLndpZHRoID0gd2lkdGg7Ci0gICAgICAgIGNvbHVtbnNbMV0ud2lk
dGggPSAxMDAgLSB3aWR0aDsKLSAgICAgICAgY29sdW1uc1swXS53aWR0aCArPSAiJSI7Ci0gICAg
ICAgIGNvbHVtbnNbMV0ud2lkdGggKz0gIiUiOwotCi0gICAgICAgIHZhciBkYXRhR3JpZCA9IG5l
dyBXZWJJbnNwZWN0b3IuRE9NU3RvcmFnZURhdGFHcmlkKGNvbHVtbnMpOwotICAgICAgICB2YXIg
bGVuZ3RoID0gbm9kZXMubGVuZ3RoOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQotICAgICAgICAgICAgZGF0YUdyaWQuYXBwZW5kQ2hpbGQobm9kZXNbaV0pOwotICAg
ICAgICBkYXRhR3JpZC5hZGRDcmVhdGlvbk5vZGUoZmFsc2UpOwotICAgICAgICBpZiAobGVuZ3Ro
ID4gMCkKLSAgICAgICAgICAgIG5vZGVzWzBdLnNlbGVjdGVkID0gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIGRhdGFHcmlkOwotICAgIH0sCi0KICAgICByZXNpemU6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHZhciB2aXNpYmxlVmlldyA9IHRoaXMudmlzaWJsZVZpZXc7CkBAIC00NDUsNDQgKzM4
MywyOCBAQCBXZWJJbnNwZWN0b3IuU3RvcmFnZVBhbmVsLnByb3RvdHlwZSA9IHsKICAgICAgICAg
ICAgIHZpc2libGVWaWV3LnJlc2l6ZSgpOwogICAgIH0sCiAKLSAgICBfcmVnaXN0ZXJTdG9yYWdl
RXZlbnRMaXN0ZW5lcjogZnVuY3Rpb24oKQorICAgIHVwZGF0ZURPTVN0b3JhZ2U6IGZ1bmN0aW9u
KHN0b3JhZ2VJZCkKICAgICB7Ci0gICAgICAgIHZhciBpbnNwZWN0ZWRXaW5kb3cgPSBJbnNwZWN0
b3JDb250cm9sbGVyLmluc3BlY3RlZFdpbmRvdygpOwotICAgICAgICBpZiAoIWluc3BlY3RlZFdp
bmRvdyB8fCAhaW5zcGVjdGVkV2luZG93LmRvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHRoaXMuX3N0b3JhZ2VFdmVudExpc3RlbmVyID0gSW5zcGVjdG9yQ29udHJvbGxl
ci53cmFwQ2FsbGJhY2sodGhpcy5fc3RvcmFnZUV2ZW50LmJpbmQodGhpcykpOwotICAgICAgICBp
bnNwZWN0ZWRXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic3RvcmFnZSIsIHRoaXMuX3N0b3JhZ2VF
dmVudExpc3RlbmVyLCB0cnVlKTsKLSAgICB9LAotCi0gICAgX3VucmVnaXN0ZXJTdG9yYWdlRXZl
bnRMaXN0ZW5lcjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdl
RXZlbnRMaXN0ZW5lcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB2YXIgaW5zcGVj
dGVkV2luZG93ID0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKTsKLSAgICAg
ICAgaWYgKCFpbnNwZWN0ZWRXaW5kb3cgfHwgIWluc3BlY3RlZFdpbmRvdy5kb2N1bWVudCkKKyAg
ICAgICAgdmFyIGRvbVN0b3JhZ2UgPSB0aGlzLl9kb21TdG9yYWdlRm9ySWQoc3RvcmFnZUlkKTsK
KyAgICAgICAgaWYgKCFkb21TdG9yYWdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGluc3BlY3RlZFdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJzdG9yYWdlIiwgdGhpcy5fc3Rv
cmFnZUV2ZW50TGlzdGVuZXIsIHRydWUpOwotICAgICAgICBkZWxldGUgdGhpcy5fc3RvcmFnZUV2
ZW50TGlzdGVuZXI7CisgICAgICAgIHZhciB2aWV3ID0gZG9tU3RvcmFnZS5fZG9tU3RvcmFnZVZp
ZXc7CisgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3ICYmIHZpZXcgPT09IHRoaXMudmlzaWJs
ZVZpZXcpCisgICAgICAgICAgICBkb21TdG9yYWdlLl9kb21TdG9yYWdlVmlldy51cGRhdGUoKTsK
ICAgICB9LAogCi0gICAgX3N0b3JhZ2VFdmVudDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2RvbVN0
b3JhZ2VGb3JJZDogZnVuY3Rpb24oc3RvcmFnZUlkKQogICAgIHsKICAgICAgICAgaWYgKCF0aGlz
Ll9kb21TdG9yYWdlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHZhciBpc0xvY2Fs
U3RvcmFnZSA9IChldmVudC5zdG9yYWdlQXJlYSA9PT0gSW5zcGVjdG9yQ29udHJvbGxlci5pbnNw
ZWN0ZWRXaW5kb3coKS5sb2NhbFN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAg
ICAgICAgIHZhciBkb21TdG9yYWdlTGVuZ3RoID0gdGhpcy5fZG9tU3RvcmFnZS5sZW5ndGg7CiAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZG9tU3RvcmFnZUxlbmd0aDsgKytpKSB7CiAgICAg
ICAgICAgICB2YXIgZG9tU3RvcmFnZSA9IHRoaXMuX2RvbVN0b3JhZ2VbaV07Ci0gICAgICAgICAg
ICBpZiAoaXNMb2NhbFN0b3JhZ2UgPT09IGRvbVN0b3JhZ2UuaXNMb2NhbFN0b3JhZ2UpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgdmlldyA9IGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VWaWV3OwotICAg
ICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVWaWV3ICYmIHZpZXcgPT09IHRoaXMudmlzaWJs
ZVZpZXcpCi0gICAgICAgICAgICAgICAgICAgIGRvbVN0b3JhZ2UuX2RvbVN0b3JhZ2VWaWV3LnVw
ZGF0ZSgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRvbVN0b3JhZ2UuaWQgPT0g
c3RvcmFnZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBkb21TdG9yYWdlOwogICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0sCiAKICAgICBfc3RhcnRTaWRlYmFyRHJhZ2dp
bmc6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3Iu
anMKaW5kZXggOTAyZGQ5NC4uNzYzY2EzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCkBAIC0xMDE2LDEyICsxMDE2LDE3IEBAIFdlYkluc3BlY3Rvci5hZGREYXRh
YmFzZSA9IGZ1bmN0aW9uKHBheWxvYWQpCiBXZWJJbnNwZWN0b3IuYWRkRE9NU3RvcmFnZSA9IGZ1
bmN0aW9uKHBheWxvYWQpCiB7CiAgICAgdmFyIGRvbVN0b3JhZ2UgPSBuZXcgV2ViSW5zcGVjdG9y
LkRPTVN0b3JhZ2UoCi0gICAgICAgIHBheWxvYWQuZG9tU3RvcmFnZSwKKyAgICAgICAgcGF5bG9h
ZC5pZCwKICAgICAgICAgcGF5bG9hZC5ob3N0LAogICAgICAgICBwYXlsb2FkLmlzTG9jYWxTdG9y
YWdlKTsKICAgICB0aGlzLnBhbmVscy5zdG9yYWdlLmFkZERPTVN0b3JhZ2UoZG9tU3RvcmFnZSk7
CiB9CiAKK1dlYkluc3BlY3Rvci51cGRhdGVET01TdG9yYWdlID0gZnVuY3Rpb24oc3RvcmFnZUlk
KQoreworICAgIHRoaXMucGFuZWxzLnN0b3JhZ2UudXBkYXRlRE9NU3RvcmFnZShzdG9yYWdlSWQp
OworfQorCiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmFja2luZ1dhc0VuYWJsZWQgPSBmdW5jdGlv
bigpCiB7CiAgICAgdGhpcy5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJhY2tpbmdXYXNFbmFi
bGVkKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>