<?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>60208</bug_id>
          
          <creation_ts>2011-05-04 13:54:58 -0700</creation_ts>
          <short_desc>IndexedDB multiple calls to transaction.objectStore(name) should return the same instance</short_desc>
          <delta_ts>2011-12-19 16:57:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Pilgrim (Google)">pilgrim</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>fishd</cc>
    
    <cc>hans</cc>
    
    <cc>jsbell</cc>
    
    <cc>pilgrim</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398227</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2011-05-04 13:54:58 -0700</bug_when>
    <thetext>Original test: http://mxr.mozilla.org/mozilla2.0/source/dom/indexedDB/test/test_object_identity.html?force=1

http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBTransactionSync-objectStore states &quot;Every call to this function on the same IDBTransactionSync instance and with the same name returns the same IDBObjectStoreSync instance.&quot; Thus, if we have this code:

objectStore1 = a_valid_transaction.objectStore(&apos;foo&apos;);
objectStore2 = a_valid_transaction.objectStore(&apos;foo&apos;);

I would expect objectStore1 === objectStore2, but it doesn&apos;t. (In Mozilla it does.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>398228</commentid>
    <comment_count>1</comment_count>
      <attachid>92314</attachid>
    <who name="Mark Pilgrim (Google)">pilgrim</who>
    <bug_when>2011-05-04 13:55:21 -0700</bug_when>
    <thetext>Created attachment 92314
test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516153</commentid>
    <comment_count>2</comment_count>
      <attachid>118091</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-06 12:29:12 -0800</bug_when>
    <thetext>Created attachment 118091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516156</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-06 12:33:34 -0800</bug_when>
    <thetext>Not ready for formal review, just wanted David and Hans to take a look:

Re: object identity
* I put in a name-&gt;object map in IDBTransaction for name-&gt;IDBObjectStore, and a similar map in IDBObjectStore for name-&gt;IDBIndex. This bookkeeping works, but... seems a little hokey. Better approaches? Maybe the backend (which would be a proxy in the multiprocess case) should hold a pointer to the frontend object?

Re: refcounting / object ownership - does this seem right?:
* IDBTransactions &quot;own&quot; IDBObjectStores, so I changed IDBObjectStore to have a raw pointer to the owning IDBTransaction to avoid reference cycles
* Similarly, IDBObjectStores &quot;own&quot; IDBIndexes, so I changed IDBIndex to have a raw pointer to the owning IDBObjectStore (and IDBTransaction) to avoid reference cycles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516309</commentid>
    <comment_count>4</comment_count>
      <attachid>118125</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-06 15:36:48 -0800</bug_when>
    <thetext>Created attachment 118125
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516310</commentid>
    <comment_count>5</comment_count>
      <attachid>118125</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-06 15:37:48 -0800</bug_when>
    <thetext>Comment on attachment 118125
Patch

Fixed tutorial.html layout test, which was asserting the exact opposite behavior of this fix.

A browser test is still failing, not sure why yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516336</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-06 16:14:38 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; A browser test is still failing, not sure why yet.

Looks like it was a random flake on my machine. Disturbing, but no repro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516776</commentid>
    <comment_count>7</comment_count>
      <attachid>118125</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-07 11:27:18 -0800</bug_when>
    <thetext>Comment on attachment 118125
Patch

In hindsight, this does avoid round-trips to the back-end when accessing stores/indexes a second time, so caching on the front-end object is probably the way to go.

So, review away!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517350</commentid>
    <comment_count>8</comment_count>
      <attachid>118125</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-12-08 05:58:55 -0800</bug_when>
    <thetext>Comment on attachment 118125
Patch

The changes to cache the objects seems fine.

I&apos;m worried about removing the refcounting, though...

If IDBIndex only has a raw pointer to IDBObjectStore, does that mean that if the JS holds on to a IDBIndex object long enough, the rest of the objects, including the object store could become garbage collected, and IDBIndex now has a pointer to freed memory?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517902</commentid>
    <comment_count>9</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-08 16:34:51 -0800</bug_when>
    <thetext>Yeah... after further thought, removing the refcounting is wrong. 

I played with having the &quot;child&quot; objects register/unregister from the &quot;parent&quot; manually in ctor/dtor. That would work, except that - names are not unique over the lifetime of the objects given VERSION_CHANGE transactions.

So... I&apos;m going try hanging front-end pointers off the back end (proxy) objects. :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522862</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-16 11:18:42 -0800</bug_when>
    <thetext>I made a proposal to public-webapps to drop the requirement that &quot;parent&quot; objects can give you back &quot;child&quot; objects after the enclosing transaction is finished. This would allow us to clear out the downward-pointing references when the transaction finishes, breaking the cycles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523130</commentid>
    <comment_count>11</comment_count>
      <attachid>119692</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-16 16:03:29 -0800</bug_when>
    <thetext>Created attachment 119692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523899</commentid>
    <comment_count>12</comment_count>
      <attachid>119692</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-12-19 07:16:51 -0800</bug_when>
    <thetext>Comment on attachment 119692
Patch

Looks good to me.

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

&gt; Source/WebCore/storage/IDBObjectStore.cpp:223
&gt; +    // Break reference cycles

missing period

&gt; Source/WebCore/storage/IDBTransaction.cpp:192
&gt; +    // Break reference cycles

period.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524134</commentid>
    <comment_count>13</comment_count>
      <attachid>119907</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-19 13:06:10 -0800</bug_when>
    <thetext>Created attachment 119907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524140</commentid>
    <comment_count>14</comment_count>
      <attachid>119907</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-12-19 13:26:52 -0800</bug_when>
    <thetext>Comment on attachment 119907
Patch

tony@ - thanks! cq?

(I still need to send in my paperwork)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524304</commentid>
    <comment_count>15</comment_count>
      <attachid>119907</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 16:57:23 -0800</bug_when>
    <thetext>Comment on attachment 119907
Patch

Clearing flags on attachment: 119907

Committed r103283: &lt;http://trac.webkit.org/changeset/103283&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>524305</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-19 16:57:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>92314</attachid>
            <date>2011-05-04 13:55:21 -0700</date>
            <delta_ts>2011-05-04 13:55:21 -0700</delta_ts>
            <desc>test case</desc>
            <filename>object-identity.html</filename>
            <type>text/html</type>
            <size>2743</size>
            <attacher name="Mark Pilgrim (Google)">pilgrim</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjwhLS0KICBvcmlnaW5hbCB0ZXN0OiBodHRwOi8vbXhyLm1vemlsbGEu
b3JnL21vemlsbGEyLjAvc291cmNlL2RvbS9pbmRleGVkREIvdGVzdC90ZXN0X29iamVjdF9pZGVu
dGl0eS5odG1sP2ZvcmNlPTEKICBsaWNlbnNlIG9mIG9yaWdpbmFsIHRlc3Q6CiAgICAiIEFueSBj
b3B5cmlnaHQgaXMgZGVkaWNhdGVkIHRvIHRoZSBQdWJsaWMgRG9tYWluLgogICAgICBodHRwOi8v
Y3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvICIKLS0+CjxodG1sPgo8
aGVhZD4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+CjxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIuLi8uLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0Pgo8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+CjwvaGVhZD4KPGJvZHk+
CjxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgo8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KPHNjcmlw
dD4KCmRlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQjogb2JqZWN0IGlkZW50aXR5Iik7CmlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CgpmdW5jdGlvbiB0ZXN0KCkKewogICAgaW5kZXhlZERCID0gZXZhbEFuZExv
ZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERC
IHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7CiAgICBzaG91bGRCZUZhbHNlKCJpbmRleGVkREIg
PT0gbnVsbCIpOwoKICAgIG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgICBkZXNj
cmlwdGlvbiA9ICJNeSBUZXN0IERhdGFiYXNlIjsKICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJp
bmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikiKTsKICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gb3BlblN1Y2Nlc3M7CiAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKfQoKZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQp7CiAgICBkYiA9IGV2YWxBbmRMb2coImRi
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOwogICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJlcXVl
c3QgPSBkYi5zZXRWZXJzaW9uKCcxJykiKTsKICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3JlYXRl
T2JqZWN0U3RvcmVBbmRJbmRleDsKICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOwp9CgpmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZUFuZEluZGV4KCkKewogICAg
dHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGV2ZW50LnRhcmdldC50cmFu
c2FjdGlvbjsiKTsKICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CiAgICBvYmplY3RTdG9y
ZTEgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZTEgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnZm9v
Jyk7Iik7CiAgICBvYmplY3RTdG9yZTIgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZTIgPSB0cmFu
c2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7Iik7CiAgICBzaG91bGRCZVRydWUoIm9iamVjdFN0
b3JlMSA9PT0gb2JqZWN0U3RvcmUyIik7CiAgICBpbmRleDEgPSBldmFsQW5kTG9nKCJpbmRleDEg
PSBvYmplY3RTdG9yZTEuY3JlYXRlSW5kZXgoJ2JhcicsICdrZXknKTsiKTsKICAgIGluZGV4MiA9
IGV2YWxBbmRMb2coImluZGV4MiA9IG9iamVjdFN0b3JlMi5pbmRleCgnYmFyJyk7Iik7CiAgICBz
aG91bGRCZVRydWUoImluZGV4MSA9PT0gaW5kZXgyIik7CiAgICBldmFsQW5kTG9nKCJ0cmFuc2Fj
dGlvbi5vbmNvbXBsZXRlID0gdGVzdElkZW50aXR5U29tZU1vcmU7Iik7Cn0KCmZ1bmN0aW9uIHRl
c3RJZGVudGl0eVNvbWVNb3JlKCkKewogICAgdHJhbnNhY3Rpb24gPSBldmFsQW5kTG9nKCJ0cmFu
c2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmb28nKTsiKTsKICAgIG9iamVjdFN0b3JlMyA9IGV2
YWxBbmRMb2coIm9iamVjdFN0b3JlMyA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmb28nKTsi
KTsKICAgIG9iamVjdFN0b3JlNCA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlNCA9IHRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdmb28nKTsiKTsKICAgIHNob3VsZEJlVHJ1ZSgib2JqZWN0U3RvcmUz
ID09PSBvYmplY3RTdG9yZTQiKTsKCiAgICBzaG91bGRCZUZhbHNlKCJvYmplY3RTdG9yZTMgPT09
IG9iamVjdFN0b3JlMSIpOwogICAgc2hvdWxkQmVGYWxzZSgib2JqZWN0U3RvcmU0ID09PSBvYmpl
Y3RTdG9yZTIiKTsKCiAgICBpbmRleDMgPSBldmFsQW5kTG9nKCJpbmRleDMgPSBvYmplY3RTdG9y
ZTMuaW5kZXgoJ2JhcicpOyIpOwogICAgaW5kZXg0ID0gZXZhbEFuZExvZygiaW5kZXg0ID0gb2Jq
ZWN0U3RvcmU0LmluZGV4KCdiYXInKTsiKTsKICAgIHNob3VsZEJlVHJ1ZSgiaW5kZXgzID09PSBp
bmRleDQiKTsKCiAgICBzaG91bGRCZUZhbHNlKCJpbmRleDMgPT09IGluZGV4MSIpOwogICAgc2hv
dWxkQmVGYWxzZSgiaW5kZXg0ID09PSBpbmRleDIiKTsKICAgIAogICAgZG9uZSgpOwp9Cgp2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKCnRlc3QoKTsKCjwvc2NyaXB0Pgo8L2JvZHk+Cjwv
aHRtbD4KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118091</attachid>
            <date>2011-12-06 12:29:12 -0800</date>
            <delta_ts>2011-12-06 15:36:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60208-20111206122911.patch</filename>
            <type>text/plain</type>
            <size>19665</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5MDhiN2FhMjcxMDky
NWIxYjYxZTk3ODMwYmI4NzljNmY4ZjBmNS4uMjQxMzQ1YjdjYjMwMzhmM2M4NzQyMjQxYTg5Y2Fl
ODk5YTdjZWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTA2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCIG11bHRp
cGxlIGNhbGxzIHRvIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKG5hbWUpIHNob3VsZCByZXR1cm4g
dGhlIHNhbWUgaW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHku
aHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCSW5kZXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6b3Bl
bkN1cnNvcik6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpv
YmplY3RTdG9yZUNyZWF0ZWQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaDoK
KwogMjAxMS0xMi0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMTczMS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKaW5kZXggMTkxYTQ1Y2RlNjBmYTgwMzAyMjExNWY3MTRl
MDQ3NTAzMGI5NzQ0Ny4uNjJkYjFkNmI4NjQ0NjkxMWRhMGVmODBkM2YzOWRmMDhmNGE3MWJiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKQEAgLTEwMCwxMiArMTAwLDE1
IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNyZW1l
bnQiLCBhdXRvSW5jcmVtZW50KTsKICAgICAvLyBGSVhNRTogTG9vayB1cCBldmljdGFibGUgYW5k
IHBhc3MgdGhhdCBvbiBhcyB3ZWxsLgogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5h
bWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlKSB7CisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5k
LT5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKCFvYmplY3RTdG9y
ZUJhY2tlbmQpIHsKICAgICAgICAgQVNTRVJUKGVjKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIHJldHVybiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlLnJlbGVhc2Uo
KSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOworCisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3Rv
cmVCYWNrZW5kLnJlbGVhc2UoKSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwg
b2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKIHZv
aWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCmluZGV4IDcwOTYx
MzAyM2M3NzAzY2UzOWU1ZGI2NGIzYWE2NDI3OGUwNzEwYWYuLmQ1YWRkZDY5MDIyZTNiZGVkNzg1
MDNlNDVmNGE0ZjgxMDVjMzZkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCkBA
IC02Myw3ICs2Myw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbik7CiAgICAgcmVxdWVz
dC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvcik7
CiAgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtODEsNyAr
ODEsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbik7CiAgICAgcmVxdWVzdC0+c2V0Q3Vy
c29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcik7CiAgICAg
bV9iYWNrZW5kLT5vcGVuS2V5Q3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtOTgsNyArOTgs
NyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24pOwogICAgIG1fYmFja2VuZC0+Z2V0KGtl
eSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7
CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWYKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPmdldEtleShrZXks
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewog
ICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eC5oCmluZGV4IDVkODhhZmNkZmI2ZWE1MTFiZDczY2Q2NmRjYjllMDRlNjIwYTY3YTcuLjNiNzZm
ODIyMmMzNTVkNWJiMmU4Y2UyMTM1YTVhMDljM2FhMTMxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkluZGV4LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgLy8gSW1wbGVtZW50IHRo
ZSBJREwKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgp
OyB9Ci0gICAgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3RTdG9yZS5nZXQoKTsgfQorICAgIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KICAgICBTdHJpbmcga2V5UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZC0+a2V5UGF0aCgpOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmQtPnVuaXF1ZSgpOyB9CiAgICAgYm9vbCBtdWx0aUVudHJ5KCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5tdWx0aUVudHJ5KCk7IH0KQEAgLTcwLDggKzcwLDgg
QEAgcHJpdmF0ZToKICAgICBJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4sIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKIAogICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5z
YWN0aW9uOworICAgIElEQk9iamVjdFN0b3JlKiBtX29iamVjdFN0b3JlOworICAgIElEQlRyYW5z
YWN0aW9uKiBtX3RyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBjOTA4NmU1Y2I2ZGQ2
M2Q1MTkyMGFlMjJmZDAyN2Q4NDQyYWQwOGU5Li5hZGNmM2NjNTIwNjQ4MjkzYzk2MjYxMDA4YTFm
NGE3ZTMzMTMwY2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVj
dFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNw
cApAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0
b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIAogSURCVHJhbnNhY3Rpb24qIElEQk9iamVjdFN0b3Jl
Ojp0cmFuc2FjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7
CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb247CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTgwLDcgKzgwLDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPmdldChrZXksIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAg
ICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwpAQCAtOTYsNyArOTYsNyBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24pOwogICAgIG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1h
cmtFYXJseURlYXRoKCk7CkBAIC0xMTIsNyArMTEyLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVh
dGgoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24pOwog
ICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vh
cmx5RGVhdGgoKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwog
CiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24pOwogICAgIG1fYmFja2VuZC0+Y2xlYXIocmVxdWVzdCwgbV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVl
c3QtPm1hcmtFYXJseURlYXRoKCk7CkBAIC0xNjMsMjAgKzE2MywyOSBAQCBQYXNzUmVmUHRyPElE
QkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbgogCiAgICAgLy8gRklYTUU6IFdoZW4gQXJyYXktdHlwZSBrZXlQYXRocyBhcmUg
c3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBpcyBBcnJheSBhbmQgbXVsdGlF
bnRyeSBpcyB0cnVlLgogCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXggPSBtX2JhY2tlbmQtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlF
bnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleCAh
PSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgotICAgIGlmICghaW5kZXgpCisg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNr
ZW5kLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFl
Yyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBh
biBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGluZGV4LnJl
bGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywg
bV90cmFuc2FjdGlvbik7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOworICAgIHJl
dHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVj
dFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9iYWNrZW5kLT5p
bmRleChuYW1lLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRu
J3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUu
IEFuZCB2aWNlIHZlcnNhLgotICAgIGlmICghaW5kZXgpCisgICAgSURCSW5kZXhNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwg
ZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBn
ZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5k
IHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGluZGV4LnJlbGVhc2UoKSwgdGhpcywgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CisKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6
OmNyZWF0ZShpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uKTsKKyAg
ICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE5Miw3ICsyMDEsNyBAQCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24pOwogICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IpOwogICAgIG1fYmFja2VuZC0+b3BlbkN1
cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKICAgICBpZiAoZWMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aAppbmRleCA5YjVhYTZiMmQzZjUzNzMxYmM2MTY1OWI5NjU2YzM2MzQ5YmNmMjZiLi44ODllMTAy
NzE2MjZhNmU0NTUwMzcwYzRjOGRiMTAzZGJlYzViNTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZS5oCkBAIC04NCw3ICs4NCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlVHJhbnNhY3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKIAogICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgSURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXg+ID4gSURCSW5k
ZXhNYXA7CisgICAgSURCSW5kZXhNYXAgbV9pbmRleE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXgg
YTFkNDFlNjRmODJiYTVjOGEwOGY2ZTk0MWVjYTM5MTQ0Nzk3NTYwZi4uY2ZkNmNjMGFiMDlkMGUz
YzQ5YTlhY2ExMzBlNjQ5MDJjZWZiNjI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5jcHAKQEAgLTg3LDE1ICs4NywyNiBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cAogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRv
ciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV9vYmpl
Y3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisKICAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBt
X2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9iamVjdFN0b3JlQmFj
a2VuZCkgewogICAgICAgICBBU1NFUlQoZWMpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpj
cmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBvYmplY3RTdG9yZUNyZWF0ZWQo
bmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9
CiAKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKQoreworICAgIG1f
b2JqZWN0U3RvcmVNYXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKK30KKwogdm9pZCBJREJUcmFu
c2FjdGlvbjo6YWJvcnQoKQogewogICAgIGlmIChtX3RyYW5zYWN0aW9uRmluaXNoZWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggY2VjNDZkNmJhNjllMWQ5N2Y5
NTBlN2ZjYjQ4YWQzODFhMjFhZjBjMi4uNGQwMWI3NWZmN2Q5MmFjODk2Nzk4ZGU1ODQxNDZmNWY3
ZDM2ZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaApAQCAtNjQs
NiArNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0
Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7CisgICAgdm9pZCBv
YmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4pOwogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb21wbGV0ZSk7CkBAIC0xMDYsNiArMTA3
LDkgQEAgcHJpdmF0ZToKIAogICAgIExpc3RIYXNoU2V0PElEQlJlcXVlc3QqPiBtX2NoaWxkUmVx
dWVzdHM7CiAKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+ID4gSURCT2JqZWN0U3RvcmVNYXA7CisgICAgSURCT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RT
dG9yZU1hcDsKKwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIH07CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMTdkNGM4N2YxMGRmNDhiNzI1NmVkOWQwMDRkYTdlNTVkNjc5N2EwLi41ZGFhNjU2
OGEyZjAyMzBlMTcxNWRkNWFkYWFiMDY2NzNiNzQ1YzM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMTItMDYgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBJbmRleGVkREIgbXVsdGlwbGUgY2FsbHMgdG8gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUobmFt
ZSkgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2Jq
ZWN0LWlkZW50aXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRl
eGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHkuaHRtbDogQWRkZWQuCisKIDIwMTEtMTItMDIg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDE3MzEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhNGU5NzE0OTNiODQ3MzQ1YmY5ZDljMGIzNjcyM2M3NGU2
OTdlMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
emlsbGEvb2JqZWN0LWlkZW50aXR5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM0IEBACitUZXN0
IEluZGV4ZWREQjogb2JqZWN0IGlkZW50aXR5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVk
REIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFs
c2UKK2luZGV4ZWREQi5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uKQorZGIgPSBldmVudC50YXJnZXQu
cmVzdWx0CityZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpCit0cmFuc2FjdGlvbiA9IGV2ZW50
LnRhcmdldC50cmFuc2FjdGlvbjsKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitvYmplY3RT
dG9yZTEgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnZm9vJyk7CitvYmplY3RTdG9yZTIgPSB0cmFu
c2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7CitQQVNTIG9iamVjdFN0b3JlMSA9PT0gb2JqZWN0
U3RvcmUyIGlzIHRydWUKK2luZGV4MSA9IG9iamVjdFN0b3JlMS5jcmVhdGVJbmRleCgnYmFyJywg
J2tleScpOworaW5kZXgyID0gb2JqZWN0U3RvcmUyLmluZGV4KCdiYXInKTsKK1BBU1MgaW5kZXgx
ID09PSBpbmRleDIgaXMgdHJ1ZQordHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IHRlc3RJZGVudGl0
eVNvbWVNb3JlOwordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZm9vJyk7CitvYmplY3RT
dG9yZTMgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7CitvYmplY3RTdG9yZTQgPSB0
cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7CitQQVNTIG9iamVjdFN0b3JlMyA9PT0gb2Jq
ZWN0U3RvcmU0IGlzIHRydWUKK1BBU1Mgb2JqZWN0U3RvcmUzID09PSBvYmplY3RTdG9yZTEgaXMg
ZmFsc2UKK1BBU1Mgb2JqZWN0U3RvcmU0ID09PSBvYmplY3RTdG9yZTIgaXMgZmFsc2UKK2luZGV4
MyA9IG9iamVjdFN0b3JlMy5pbmRleCgnYmFyJyk7CitpbmRleDQgPSBvYmplY3RTdG9yZTQuaW5k
ZXgoJ2JhcicpOworUEFTUyBpbmRleDMgPT09IGluZGV4NCBpcyB0cnVlCitQQVNTIGluZGV4MyA9
PT0gaW5kZXgxIGlzIGZhbHNlCitQQVNTIGluZGV4NCA9PT0gaW5kZXgyIGlzIGZhbHNlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHku
aHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2JqZWN0LWlkZW50
aXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRlOWRhZjhiN2Y2NDA3OTgzMGQ3NGE2MTUzNWYxYWM3MTJi
ODcwNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
emlsbGEvb2JqZWN0LWlkZW50aXR5Lmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8IS0tCisgIG9yaWdpbmFsIHRlc3Q6IGh0dHA6Ly9teHIubW96aWxsYS5vcmcvbW96aWxs
YTIuMC9zb3VyY2UvZG9tL2luZGV4ZWREQi90ZXN0L3Rlc3Rfb2JqZWN0X2lkZW50aXR5Lmh0bWw/
Zm9yY2U9MQorICBsaWNlbnNlIG9mIG9yaWdpbmFsIHRlc3Q6CisgICAgIiBBbnkgY29weXJpZ2h0
IGlzIGRlZGljYXRlZCB0byB0aGUgUHVibGljIERvbWFpbi4KKyAgICAgIGh0dHA6Ly9jcmVhdGl2
ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8gIgorLS0+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQjog
b2JqZWN0IGlkZW50aXR5Iik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgp
Cit7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4
ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7
CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsKKworICAgIG5hbWUgPSB3
aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgZGVzY3JpcHRpb24gPSAiTXkgVGVzdCBEYXRh
YmFzZSI7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKG5hbWUsIGRl
c2NyaXB0aW9uKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IG9wZW5TdWNjZXNzKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQudGFyZ2V0
LnJlc3VsdCIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gZGIuc2V0VmVy
c2lvbignMScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBjcmVhdGVPYmplY3RTdG9yZUFu
ZEluZGV4OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZUFuZEluZGV4KCkKK3sKKyAgICB0cmFuc2Fj
dGlvbiA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0LnRyYW5zYWN0aW9u
OyIpOworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgb2JqZWN0U3RvcmUxID0g
ZXZhbEFuZExvZygib2JqZWN0U3RvcmUxID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2ZvbycpOyIp
OworICAgIG9iamVjdFN0b3JlMiA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlMiA9IHRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdmb28nKTsiKTsKKyAgICBzaG91bGRCZVRydWUoIm9iamVjdFN0b3Jl
MSA9PT0gb2JqZWN0U3RvcmUyIik7CisgICAgaW5kZXgxID0gZXZhbEFuZExvZygiaW5kZXgxID0g
b2JqZWN0U3RvcmUxLmNyZWF0ZUluZGV4KCdiYXInLCAna2V5Jyk7Iik7CisgICAgaW5kZXgyID0g
ZXZhbEFuZExvZygiaW5kZXgyID0gb2JqZWN0U3RvcmUyLmluZGV4KCdiYXInKTsiKTsKKyAgICBz
aG91bGRCZVRydWUoImluZGV4MSA9PT0gaW5kZXgyIik7CisgICAgZXZhbEFuZExvZygidHJhbnNh
Y3Rpb24ub25jb21wbGV0ZSA9IHRlc3RJZGVudGl0eVNvbWVNb3JlOyIpOworfQorCitmdW5jdGlv
biB0ZXN0SWRlbnRpdHlTb21lTW9yZSgpCit7CisgICAgdHJhbnNhY3Rpb24gPSBldmFsQW5kTG9n
KCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmb28nKTsiKTsKKyAgICBvYmplY3RTdG9y
ZTMgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZTMgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
Zm9vJyk7Iik7CisgICAgb2JqZWN0U3RvcmU0ID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmU0ID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZvbycpOyIpOworICAgIHNob3VsZEJlVHJ1ZSgib2Jq
ZWN0U3RvcmUzID09PSBvYmplY3RTdG9yZTQiKTsKKworICAgIHNob3VsZEJlRmFsc2UoIm9iamVj
dFN0b3JlMyA9PT0gb2JqZWN0U3RvcmUxIik7CisgICAgc2hvdWxkQmVGYWxzZSgib2JqZWN0U3Rv
cmU0ID09PSBvYmplY3RTdG9yZTIiKTsKKworICAgIGluZGV4MyA9IGV2YWxBbmRMb2coImluZGV4
MyA9IG9iamVjdFN0b3JlMy5pbmRleCgnYmFyJyk7Iik7CisgICAgaW5kZXg0ID0gZXZhbEFuZExv
ZygiaW5kZXg0ID0gb2JqZWN0U3RvcmU0LmluZGV4KCdiYXInKTsiKTsKKyAgICBzaG91bGRCZVRy
dWUoImluZGV4MyA9PT0gaW5kZXg0Iik7CisKKyAgICBzaG91bGRCZUZhbHNlKCJpbmRleDMgPT09
IGluZGV4MSIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4NCA9PT0gaW5kZXgyIik7CisKKyAg
ICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118125</attachid>
            <date>2011-12-06 15:36:48 -0800</date>
            <delta_ts>2011-12-16 16:03:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60208-20111206153647.patch</filename>
            <type>text/plain</type>
            <size>20637</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5MDhiN2FhMjcxMDky
NWIxYjYxZTk3ODMwYmI4NzljNmY4ZjBmNS4uMjQxMzQ1YjdjYjMwMzhmM2M4NzQyMjQxYTg5Y2Fl
ODk5YTdjZWVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDExLTEyLTA2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCIG11bHRp
cGxlIGNhbGxzIHRvIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKG5hbWUpIHNob3VsZCByZXR1cm4g
dGhlIHNhbWUgaW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHku
aHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCSW5kZXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5DdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9wZW5LZXlDdXJzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCSW5kZXg6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0S2V5
KToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6b3Bl
bkN1cnNvcik6CisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb246Om9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpv
YmplY3RTdG9yZUNyZWF0ZWQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaDoK
KwogMjAxMS0xMi0wMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEwMTczMS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKaW5kZXggMTkxYTQ1Y2RlNjBmYTgwMzAyMjExNWY3MTRl
MDQ3NTAzMGI5NzQ0Ny4uNjJkYjFkNmI4NjQ0NjkxMWRhMGVmODBkM2YzOWRmMDhmNGE3MWJiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZS5jcHAKQEAgLTEwMCwxMiArMTAwLDE1
IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNyZW1l
bnQiLCBhdXRvSW5jcmVtZW50KTsKICAgICAvLyBGSVhNRTogTG9vayB1cCBldmljdGFibGUgYW5k
IHBhc3MgdGhhdCBvbiBhcyB3ZWxsLgogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPmNyZWF0ZU9iamVjdFN0b3JlKG5h
bWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlKSB7CisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5k
LT5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50LCBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgaWYgKCFvYmplY3RTdG9y
ZUJhY2tlbmQpIHsKICAgICAgICAgQVNTRVJUKGVjKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIHJldHVybiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlLnJlbGVhc2Uo
KSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOworCisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUob2JqZWN0U3Rv
cmVCYWNrZW5kLnJlbGVhc2UoKSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwg
b2JqZWN0U3RvcmUpOworICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKIHZv
aWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQklu
ZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCmluZGV4IDcwOTYx
MzAyM2M3NzAzY2UzOWU1ZGI2NGIzYWE2NDI3OGUwNzEwYWYuLmQ1YWRkZDY5MDIyZTNiZGVkNzg1
MDNlNDVmNGE0ZjgxMDVjMzZkYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguY3BwCkBA
IC02Myw3ICs2Myw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJz
b3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbik7CiAgICAgcmVxdWVz
dC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvcik7
CiAgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtODEsNyAr
ODEsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNv
bnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBS
ZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJ
REJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbik7CiAgICAgcmVxdWVzdC0+c2V0Q3Vy
c29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcik7CiAgICAg
bV9iYWNrZW5kLT5vcGVuS2V5Q3Vyc29yKGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1f
dHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtOTgsNyArOTgs
NyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVm
UHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURC
QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24pOwogICAgIG1fYmFja2VuZC0+Z2V0KGtl
eSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7
CiAgICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CkBAIC0xMTQsNyArMTE0LDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWYKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPmdldEtleShrZXks
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewog
ICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRl
eC5oCmluZGV4IDVkODhhZmNkZmI2ZWE1MTFiZDczY2Q2NmRjYjllMDRlNjIwYTY3YTcuLjNiNzZm
ODIyMmMzNTVkNWJiMmU4Y2UyMTM1YTVhMDljM2FhMTMxMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkluZGV4LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogCiAgICAgLy8gSW1wbGVtZW50IHRo
ZSBJREwKICAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC0+bmFtZSgp
OyB9Ci0gICAgSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9v
YmplY3RTdG9yZS5nZXQoKTsgfQorICAgIElEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmU7IH0KICAgICBTdHJpbmcga2V5UGF0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZC0+a2V5UGF0aCgpOyB9CiAgICAgYm9vbCB1bmlxdWUoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tlbmQtPnVuaXF1ZSgpOyB9CiAgICAgYm9vbCBtdWx0aUVudHJ5KCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLT5tdWx0aUVudHJ5KCk7IH0KQEAgLTcwLDggKzcwLDgg
QEAgcHJpdmF0ZToKICAgICBJREJJbmRleChQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4sIElEQk9iamVjdFN0b3JlKiwgSURCVHJhbnNhY3Rpb24qKTsKIAogICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5z
YWN0aW9uOworICAgIElEQk9iamVjdFN0b3JlKiBtX29iamVjdFN0b3JlOworICAgIElEQlRyYW5z
YWN0aW9uKiBtX3RyYW5zYWN0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBjOTA4NmU1Y2I2ZGQ2
M2Q1MTkyMGFlMjJmZDAyN2Q4NDQyYWQwOGU5Li5hZGNmM2NjNTIwNjQ4MjkzYzk2MjYxMDA4YTFm
NGE3ZTMzMTMwY2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVj
dFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNw
cApAQCAtNzAsNyArNzAsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0
b3JlOjppbmRleE5hbWVzKCkgY29uc3QKIAogSURCVHJhbnNhY3Rpb24qIElEQk9iamVjdFN0b3Jl
Ojp0cmFuc2FjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0KCk7
CisgICAgcmV0dXJuIG1fdHJhbnNhY3Rpb247CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTgwLDcgKzgwLDcgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
SURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJ
REJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6
Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPmdldChrZXksIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewogICAg
ICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwpAQCAtOTYsNyArOTYsNyBAQCBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzcwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24pOwogICAgIG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElE
Qk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6QWRkT25seSwgcmVxdWVzdCwgbV90cmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVlc3QtPm1h
cmtFYXJseURlYXRoKCk7CkBAIC0xMTIsNyArMTEyLDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3MKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uKTsKICAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVh
dGgoKTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0
OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24pOwog
ICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24oa2V5LCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9u
LT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vh
cmx5RGVhdGgoKTsKQEAgLTEzOSw3ICsxMzksNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElE
Qk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjbwog
CiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBSZWZQdHI8
SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24pOwogICAgIG1fYmFja2VuZC0+Y2xlYXIocmVxdWVzdCwgbV90
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHJlcXVl
c3QtPm1hcmtFYXJseURlYXRoKCk7CkBAIC0xNjMsMjAgKzE2MywyOSBAQCBQYXNzUmVmUHRyPElE
QkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbgogCiAgICAgLy8gRklYTUU6IFdoZW4gQXJyYXktdHlwZSBrZXlQYXRocyBhcmUg
c3VwcG9ydGVkLCB0aHJvdyBleGNlcHRpb24gaWYga2V5UGF0aCBpcyBBcnJheSBhbmQgbXVsdGlF
bnRyeSBpcyB0cnVlLgogCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5k
ZXggPSBtX2JhY2tlbmQtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlF
bnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleCAh
PSAhZWMpOyAvLyBJZiB3ZSBkaWRuJ3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0
ZW4gYW4gZXhjZXB0aW9uIGNvZGUuIEFuZCB2aWNlIHZlcnNhLgotICAgIGlmICghaW5kZXgpCisg
ICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNr
ZW5kLT5jcmVhdGVJbmRleChuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11bHRpRW50cnksIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFl
Yyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBh
biBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGluZGV4LnJl
bGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQkluZGV4
PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5kZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywg
bV90cmFuc2FjdGlvbik7CisgICAgbV9pbmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOworICAgIHJl
dHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVj
dFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4ID0gbV9iYWNrZW5kLT5p
bmRleChuYW1lLCBlYyk7Ci0gICAgQVNTRVJUKCFpbmRleCAhPSAhZWMpOyAvLyBJZiB3ZSBkaWRu
J3QgZ2V0IGFuIGluZGV4LCB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gYW4gZXhjZXB0aW9uIGNvZGUu
IEFuZCB2aWNlIHZlcnNhLgotICAgIGlmICghaW5kZXgpCisgICAgSURCSW5kZXhNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2luZGV4TWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwg
ZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBn
ZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5k
IHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGluZGV4LnJlbGVhc2UoKSwgdGhpcywgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CisKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6
OmNyZWF0ZShpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uKTsKKyAg
ICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVhc2Uo
KTsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE5Miw3ICsyMDEsNyBAQCBQYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCUmVx
dWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0
ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24pOwogICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IpOwogICAgIG1fYmFja2VuZC0+b3BlbkN1
cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCks
IGVjKTsKICAgICBpZiAoZWMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUu
aAppbmRleCA5YjVhYTZiMmQzZjUzNzMxYmM2MTY1OWI5NjU2YzM2MzQ5YmNmMjZiLi44ODllMTAy
NzE2MjZhNmU0NTUwMzcwYzRjOGRiMTAzZGJlYzViNTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZS5oCkBAIC04NCw3ICs4NCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVtb3ZlVHJhbnNhY3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKIAogICAgIFJlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKLSAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb24+IG1fdHJhbnNhY3Rpb247CisgICAgSURCVHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXg+ID4gSURCSW5k
ZXhNYXA7CisgICAgSURCSW5kZXhNYXAgbV9pbmRleE1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXgg
YTFkNDFlNjRmODJiYTVjOGEwOGY2ZTk0MWVjYTM5MTQ0Nzk3NTYwZi4uY2ZkNmNjMGFiMDlkMGUz
YzQ5YTlhY2ExMzBlNjQ5MDJjZWZiNjI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5jcHAKQEAgLTg3LDE1ICs4NywyNiBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cAogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIElEQk9iamVjdFN0b3JlTWFwOjppdGVyYXRv
ciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQgIT0gbV9vYmpl
Y3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisKICAgICBSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBt
X2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9iamVjdFN0b3JlQmFj
a2VuZCkgewogICAgICAgICBBU1NFUlQoZWMpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpj
cmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBvYmplY3RTdG9yZUNyZWF0ZWQo
bmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9
CiAKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKQoreworICAgIG1f
b2JqZWN0U3RvcmVNYXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKK30KKwogdm9pZCBJREJUcmFu
c2FjdGlvbjo6YWJvcnQoKQogewogICAgIGlmIChtX3RyYW5zYWN0aW9uRmluaXNoZWQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggY2VjNDZkNmJhNjllMWQ5N2Y5
NTBlN2ZjYjQ4YWQzODFhMjFhZjBjMi4uNGQwMWI3NWZmN2Q5MmFjODk2Nzk4ZGU1ODQxNDZmNWY3
ZDM2ZGVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaApAQCAtNjQs
NiArNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0
Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0Kik7CisgICAgdm9pZCBv
YmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZT4pOwogCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihhYm9ydCk7CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihjb21wbGV0ZSk7CkBAIC0xMDYsNiArMTA3
LDkgQEAgcHJpdmF0ZToKIAogICAgIExpc3RIYXNoU2V0PElEQlJlcXVlc3QqPiBtX2NoaWxkUmVx
dWVzdHM7CiAKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+ID4gSURCT2JqZWN0U3RvcmVNYXA7CisgICAgSURCT2JqZWN0U3RvcmVNYXAgbV9vYmplY3RT
dG9yZU1hcDsKKwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKIH07CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMTdkNGM4N2YxMGRmNDhiNzI1NmVkOWQwMDRkYTdlNTVkNjc5N2EwLi41ZGFhNjU2
OGEyZjAyMzBlMTcxNWRkNWFkYWFiMDY2NzNiNzQ1YzM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMTItMDYgIEpvc2h1YSBCZWxsICA8anNiZWxsQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBJbmRleGVkREIgbXVsdGlwbGUgY2FsbHMgdG8gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUobmFt
ZSkgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjAyMDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2Jq
ZWN0LWlkZW50aXR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRl
eGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHkuaHRtbDogQWRkZWQuCisKIDIwMTEtMTItMDIg
IFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMDE3MzEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhNGU5NzE0OTNiODQ3MzQ1YmY5ZDljMGIzNjcyM2M3NGU2
OTdlMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
emlsbGEvb2JqZWN0LWlkZW50aXR5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM0IEBACitUZXN0
IEluZGV4ZWREQjogb2JqZWN0IGlkZW50aXR5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVk
REIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFs
c2UKK2luZGV4ZWREQi5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uKQorZGIgPSBldmVudC50YXJnZXQu
cmVzdWx0CityZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpCit0cmFuc2FjdGlvbiA9IGV2ZW50
LnRhcmdldC50cmFuc2FjdGlvbjsKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitvYmplY3RT
dG9yZTEgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnZm9vJyk7CitvYmplY3RTdG9yZTIgPSB0cmFu
c2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7CitQQVNTIG9iamVjdFN0b3JlMSA9PT0gb2JqZWN0
U3RvcmUyIGlzIHRydWUKK2luZGV4MSA9IG9iamVjdFN0b3JlMS5jcmVhdGVJbmRleCgnYmFyJywg
J2tleScpOworaW5kZXgyID0gb2JqZWN0U3RvcmUyLmluZGV4KCdiYXInKTsKK1BBU1MgaW5kZXgx
ID09PSBpbmRleDIgaXMgdHJ1ZQordHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IHRlc3RJZGVudGl0
eVNvbWVNb3JlOwordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZm9vJyk7CitvYmplY3RT
dG9yZTMgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7CitvYmplY3RTdG9yZTQgPSB0
cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7CitQQVNTIG9iamVjdFN0b3JlMyA9PT0gb2Jq
ZWN0U3RvcmU0IGlzIHRydWUKK1BBU1Mgb2JqZWN0U3RvcmUzID09PSBvYmplY3RTdG9yZTEgaXMg
ZmFsc2UKK1BBU1Mgb2JqZWN0U3RvcmU0ID09PSBvYmplY3RTdG9yZTIgaXMgZmFsc2UKK2luZGV4
MyA9IG9iamVjdFN0b3JlMy5pbmRleCgnYmFyJyk7CitpbmRleDQgPSBvYmplY3RTdG9yZTQuaW5k
ZXgoJ2JhcicpOworUEFTUyBpbmRleDMgPT09IGluZGV4NCBpcyB0cnVlCitQQVNTIGluZGV4MyA9
PT0gaW5kZXgxIGlzIGZhbHNlCitQQVNTIGluZGV4NCA9PT0gaW5kZXgyIGlzIGZhbHNlCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHku
aHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2JqZWN0LWlkZW50
aXR5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRlOWRhZjhiN2Y2NDA3OTgzMGQ3NGE2MTUzNWYxYWM3MTJi
ODcwNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21v
emlsbGEvb2JqZWN0LWlkZW50aXR5Lmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPCFET0NUWVBFIGh0
bWw+Cis8IS0tCisgIG9yaWdpbmFsIHRlc3Q6IGh0dHA6Ly9teHIubW96aWxsYS5vcmcvbW96aWxs
YTIuMC9zb3VyY2UvZG9tL2luZGV4ZWREQi90ZXN0L3Rlc3Rfb2JqZWN0X2lkZW50aXR5Lmh0bWw/
Zm9yY2U9MQorICBsaWNlbnNlIG9mIG9yaWdpbmFsIHRlc3Q6CisgICAgIiBBbnkgY29weXJpZ2h0
IGlzIGRlZGljYXRlZCB0byB0aGUgUHVibGljIERvbWFpbi4KKyAgICAgIGh0dHA6Ly9jcmVhdGl2
ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8gIgorLS0+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQjog
b2JqZWN0IGlkZW50aXR5Iik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgp
Cit7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4
ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7
CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsKKworICAgIG5hbWUgPSB3
aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CisgICAgZGVzY3JpcHRpb24gPSAiTXkgVGVzdCBEYXRh
YmFzZSI7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5vcGVuKG5hbWUsIGRl
c2NyaXB0aW9uKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gb3BlblN1Y2Nlc3M7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IG9wZW5TdWNjZXNzKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQudGFyZ2V0
LnJlc3VsdCIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gZGIuc2V0VmVy
c2lvbignMScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBjcmVhdGVPYmplY3RTdG9yZUFu
ZEluZGV4OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBjcmVhdGVPYmplY3RTdG9yZUFuZEluZGV4KCkKK3sKKyAgICB0cmFuc2Fj
dGlvbiA9IGV2YWxBbmRMb2coInRyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0LnRyYW5zYWN0aW9u
OyIpOworICAgIGRlbGV0ZUFsbE9iamVjdFN0b3JlcyhkYik7CisgICAgb2JqZWN0U3RvcmUxID0g
ZXZhbEFuZExvZygib2JqZWN0U3RvcmUxID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2ZvbycpOyIp
OworICAgIG9iamVjdFN0b3JlMiA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlMiA9IHRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdmb28nKTsiKTsKKyAgICBzaG91bGRCZVRydWUoIm9iamVjdFN0b3Jl
MSA9PT0gb2JqZWN0U3RvcmUyIik7CisgICAgaW5kZXgxID0gZXZhbEFuZExvZygiaW5kZXgxID0g
b2JqZWN0U3RvcmUxLmNyZWF0ZUluZGV4KCdiYXInLCAna2V5Jyk7Iik7CisgICAgaW5kZXgyID0g
ZXZhbEFuZExvZygiaW5kZXgyID0gb2JqZWN0U3RvcmUyLmluZGV4KCdiYXInKTsiKTsKKyAgICBz
aG91bGRCZVRydWUoImluZGV4MSA9PT0gaW5kZXgyIik7CisgICAgZXZhbEFuZExvZygidHJhbnNh
Y3Rpb24ub25jb21wbGV0ZSA9IHRlc3RJZGVudGl0eVNvbWVNb3JlOyIpOworfQorCitmdW5jdGlv
biB0ZXN0SWRlbnRpdHlTb21lTW9yZSgpCit7CisgICAgdHJhbnNhY3Rpb24gPSBldmFsQW5kTG9n
KCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmb28nKTsiKTsKKyAgICBvYmplY3RTdG9y
ZTMgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZTMgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
Zm9vJyk7Iik7CisgICAgb2JqZWN0U3RvcmU0ID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmU0ID0g
dHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZvbycpOyIpOworICAgIHNob3VsZEJlVHJ1ZSgib2Jq
ZWN0U3RvcmUzID09PSBvYmplY3RTdG9yZTQiKTsKKworICAgIHNob3VsZEJlRmFsc2UoIm9iamVj
dFN0b3JlMyA9PT0gb2JqZWN0U3RvcmUxIik7CisgICAgc2hvdWxkQmVGYWxzZSgib2JqZWN0U3Rv
cmU0ID09PSBvYmplY3RTdG9yZTIiKTsKKworICAgIGluZGV4MyA9IGV2YWxBbmRMb2coImluZGV4
MyA9IG9iamVjdFN0b3JlMy5pbmRleCgnYmFyJyk7Iik7CisgICAgaW5kZXg0ID0gZXZhbEFuZExv
ZygiaW5kZXg0ID0gb2JqZWN0U3RvcmU0LmluZGV4KCdiYXInKTsiKTsKKyAgICBzaG91bGRCZVRy
dWUoImluZGV4MyA9PT0gaW5kZXg0Iik7CisKKyAgICBzaG91bGRCZUZhbHNlKCJpbmRleDMgPT09
IGluZGV4MSIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4NCA9PT0gaW5kZXgyIik7CisKKyAg
ICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLmh0bWwg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCmluZGV4IDNjMDQ4
NTJmZjFiNTkyMDBhN2RlNmMzN2QxOWExYTJhODdiZWEzOGQuLjVjZGNkYjJlNDMwYzhlNDk4NWRk
OTQ0Y2Y3ZmZlMmM2ZTllM2MyYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL3R1dG9yaWFsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
dHV0b3JpYWwuaHRtbApAQCAtMzEyLDEwICszMTIsMTAgQEAgZnVuY3Rpb24gb25QdXRUcmFuc2Fj
dGlvbkNvbXBsZXRlKCkKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9uR2V0U3VjY2VzczsKICAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3I7CiAKLSAgICAvLyBOb3RlIHRoYXQg
bXVsdGlwbGUgb2JqZWN0U3RvcmUgKG9yIGluZGV4KSBtZXRob2QgY2FsbHMgd2lsbCByZXR1cm4g
ZGlmZmVyZW50IG9iamVjdHMgKHRoYXQgc3RpbGwKLSAgICAvLyByZWZlciB0byB0aGUgc2FtZSBv
YmplY3RTdG9yZS9pbmRleCBvbiBkaXNrKS4KLSAgICBwZW9wbGUuc29tZVByb3BlcnR5ID0gdHJ1
ZTsKLSAgICBpZiAoY3VycmVudFRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCJwZW9wbGUiKS5zb21l
UHJvcGVydHkpCisgICAgLy8gTm90ZSB0aGF0IG11bHRpcGxlIG9iamVjdFN0b3JlIChvciBpbmRl
eCkgbWV0aG9kIGNhbGxzIHdpbGwgcmV0dXJuIHRoZSBzYW1lIG9iamVjdCwgd2l0aGluCisgICAg
Ly8gYSB0cmFuc2FjdGlvbjoKKyAgICBwZW9wbGUuc29tZVByb3BlcnR5ID0gInh5eiI7CisgICAg
aWYgKGN1cnJlbnRUcmFuc2FjdGlvbi5vYmplY3RTdG9yZSgicGVvcGxlIikuc29tZVByb3BlcnR5
ICE9ICJ4eXoiKQogICAgICAgICBsb2dFcnJvcigiU29tZXRoaW5nIHdlbnQgd3JvbmcuIik7CiB9
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119692</attachid>
            <date>2011-12-16 16:03:29 -0800</date>
            <delta_ts>2011-12-19 13:06:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60208-20111216160328.patch</filename>
            <type>text/plain</type>
            <size>19228</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNkMTI3NjgyZTA1Yjkz
MDFiZTljY2I5YjJkNmZhMjJmMDllNDg0Yy4uYzZkZDEwMmM1MTM4YjZhZWU5Y2ExZjhiZTIzZTE1
YWNmMDI0YzI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEyLTE2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCIG11bHRp
cGxlIGNhbGxzIHRvIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKG5hbWUpIHNob3VsZCByZXR1cm4g
dGhlIHNhbWUgaW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRGl0dG8gZm9yIGNhbGxzIHRvIElEQk9iamVjdFN0b3JlLmluZGV4KCkuIENhbGxp
bmcgdGhlc2UgbWV0aG9kcyBhZnRlciB0aGUKKyAgICAgICAgZW5jbG9zaW5nIHRyYW5zYWN0aW9u
IGhhcyBmaW5pc2hlZCBub3cgY29uc2lzdGVudGx5IHRocm93cyBhbiBlcnJvciwgd2hpY2gKKyAg
ICAgICAgYWxsb3dzIHVzIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisKKyAgICAgICAgVGVz
dDogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHkuaHRtbAorCisgICAg
ICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZUNyZWF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAq
IHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaDoKKwogMjAxMS0xMi0xNSAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTAyNjYzKTogZ2Vu
ZXJhdGUtYmluZGluZ3MucGwgcnVucyBldmVyeSB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2UuY3BwCmluZGV4IDE5MWE0NWNkZTYwZmE4MDMwMjIxMTVmNzE0ZTA0NzUwMzBiOTc0
NDcuLjE1OTVjNTkyYzdjNjk5MDJlYTYyMGJlOTVmMzFiMmVjZWQxZGFmOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDAsMTIgKzEwMCwxNSBAQCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjbwogICAgIG9wdGlvbnMuZ2V0KCJhdXRvSW5jcmVtZW50IiwgYXV0b0lu
Y3JlbWVudCk7CiAgICAgLy8gRklYTUU6IExvb2sgdXAgZXZpY3RhYmxlIGFuZCBwYXNzIHRoYXQg
b24gYXMgd2VsbC4KIAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRo
LCBhdXRvSW5jcmVtZW50LCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkgeworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2Jq
ZWN0U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7
CiAgICAgICAgIEFTU0VSVChlYyk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1
cm4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmplY3RTdG9yZS5yZWxlYXNlKCksIG1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlQmFja2VuZC5y
ZWxlYXNlKCksIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3Jl
KTsKKyAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQogCiB2b2lkIElEQkRhdGFi
YXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTE2LDYgKzExOSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgfQogCiAgICAg
bV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9i
amVjdFN0b3JlRGVsZXRlZChuYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdD4gSURCRGF0YWJhc2U6OnNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggYzkwODZlNWNiNmRkNjNk
NTE5MjBhZTIyZmQwMjdkODQ0MmFkMDhlOS4uZDAzYjUyZGQyNDliNzYzOWEwMDZhZWE3ZDYwYzFl
ODM1OTI5ZDFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTE2MywyMCArMTYzLDM0IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluCiAKICAgICAvLyBG
SVhNRTogV2hlbiBBcnJheS10eXBlIGtleVBhdGhzIGFyZSBzdXBwb3J0ZWQsIHRocm93IGV4Y2Vw
dGlvbiBpZiBrZXlQYXRoIGlzIEFycmF5IGFuZCBtdWx0aUVudHJ5IGlzIHRydWUuCiAKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fYmFja2VuZC0+Y3JlYXRl
SW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4ICE9ICFlYyk7IC8vIElmIHdlIGRpZG4n
dCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4g
QW5kIHZpY2UgdmVyc2EuCi0gICAgaWYgKCFpbmRleCkKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZUluZGV4KG5hbWUs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7CisgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdl
dCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQg
dmljZSB2ZXJzYS4KKyAgICBpZiAoIWluZGV4QmFja2VuZCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIElEQkluZGV4OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNy
ZWF0ZShpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
KyAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVh
c2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsK
LSAgICBBU1NFUlQoIWluZGV4ICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgs
IHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2Eu
Ci0gICAgaWYgKCFpbmRleCkKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGluZGV4LnJlbGVhc2Uo
KSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgo
bmFtZSwgZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRp
ZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29k
ZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5k
ZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9p
bmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOworICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9
CiAKIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yMDIsNiArMjE2LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCit2b2lkIElEQk9iamVj
dFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bi0+ZmluaXNoZWQoKSk7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzCisgICAgbV9p
bmRleE1hcC5jbGVhcigpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZS5oCmluZGV4IDliNWFhNmIyZDNmNTM3MzFiYzYxNjU5Yjk2NTZjMzYzNDliY2YyNmIu
LjgzNTc4NTFiOWZhYzljYjczNzM4NWJjOGRjNWI0YzcyYzBlNzIxNDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKQEAgLTc5LDEyICs3OSwxNyBAQCBwdWJsaWM6CiAK
ICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmKTsgCiAKKyAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKKwog
cHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZShQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7CiAgICAgdm9pZCByZW1vdmVUcmFuc2Fj
dGlvbkZyb21QZW5kaW5nTGlzdCgpOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gbV90cmFu
c2FjdGlvbjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJREJJbmRleD4g
PiBJREJJbmRleE1hcDsKKyAgICBJREJJbmRleE1hcCBtX2luZGV4TWFwOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJU
cmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNw
cAppbmRleCBhMWQ0MWU2NGY4MmJhNWM4YTA4ZjZlOTQxZWNhMzkxNDQ3OTc1NjBmLi5kODI2Zjg0
ZDNlYzdhNmZjNGRhY2I2NDc1N2U2ZDlkMTMxY2ZlZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtODcsMTUgKzg3LDMzIEBAIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PVF9BTExPV0VE
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCisgICAgSURCT2JqZWN0U3RvcmVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAh
PSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKwog
ICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFj
a2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFtZSwgZWMpOwogICAgIGlmICghb2JqZWN0
U3RvcmVCYWNrZW5kKSB7CiAgICAgICAgIEFTU0VSVChlYyk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0
U3RvcmU6OmNyZWF0ZShvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOworICAgIG9iamVjdFN0b3Jl
Q3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVh
c2UoKTsKIH0KIAordm9pZCBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmVDcmVhdGVkKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUpCit7
CisgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQpOworICAgIG1fb2JqZWN0U3RvcmVN
YXAuc2V0KG5hbWUsIG9iamVjdFN0b3JlKTsKK30KKwordm9pZCBJREJUcmFuc2FjdGlvbjo6b2Jq
ZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBBU1NFUlQoIW1fdHJh
bnNhY3Rpb25GaW5pc2hlZCk7CisgICAgbV9vYmplY3RTdG9yZU1hcC5yZW1vdmUobmFtZSk7Cit9
CisKIHZvaWQgSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlv
bkZpbmlzaGVkKQpAQCAtMTcxLDYgKzE4OSwxMSBAQCBib29sIElEQlRyYW5zYWN0aW9uOjpkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVChldmVudC0+dGFy
Z2V0KCkgPT0gdGhpcyk7CiAgICAgbV90cmFuc2FjdGlvbkZpbmlzaGVkID0gdHJ1ZTsKIAorICAg
IC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWFwOjpp
dGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuYmVnaW4oKTsgaXQgIT0gbV9vYmplY3RTdG9y
ZU1hcC5lbmQoKTsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+dHJhbnNhY3Rpb25GaW5pc2hl
ZCgpOworICAgIG1fb2JqZWN0U3RvcmVNYXAuY2xlYXIoKTsKKwogICAgIFZlY3RvcjxSZWZQdHI8
RXZlbnRUYXJnZXQ+ID4gdGFyZ2V0czsKICAgICB0YXJnZXRzLmFwcGVuZCh0aGlzKTsKICAgICB0
YXJnZXRzLmFwcGVuZChkYigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24u
aAppbmRleCBjZWM0NmQ2YmE2OWUxZDk3Zjk1MGU3ZmNiNDhhZDM4MWEyMWFmMGMyLi4xZDM0Y2Mz
YmQ0MDMzNzk4OTIwNjkxYzAwYmE4OTlhZDEyMGUyODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5oCkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cmVnaXN0ZXJSZXF1ZXN0KElEQlJlcXVlc3QqKTsKICAgICB2b2lkIHVucmVnaXN0ZXJSZXF1ZXN0
KElEQlJlcXVlc3QqKTsKKyAgICB2b2lkIG9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcm
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPik7CisgICAgdm9pZCBvYmplY3RTdG9yZURlbGV0
ZWQoY29uc3QgU3RyaW5nJik7CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVS
KGFib3J0KTsKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGNvbXBsZXRlKTsK
QEAgLTEwNiw2ICsxMDgsOSBAQCBwcml2YXRlOgogCiAgICAgTGlzdEhhc2hTZXQ8SURCUmVxdWVz
dCo+IG1fY2hpbGRSZXF1ZXN0czsKIAorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxJREJPYmplY3RTdG9yZT4gPiBJREJPYmplY3RTdG9yZU1hcDsKKyAgICBJREJPYmplY3RTdG9y
ZU1hcCBtX29iamVjdFN0b3JlTWFwOworCiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJn
ZXREYXRhOwogfTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZmYmFmZGU2YzBiM2Q4YjQ2N2VmY2I4OWI5MTM3YmE2ODk1
ODY3NDIuLmE1YjA2MzlmMGNiMjZmNzNlZDY4ZmVkZDgwNTdlMTRhZWY4NzAzODggMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNiBAQAorMjAxMS0xMi0xNiAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIEluZGV4ZWREQiBtdWx0aXBsZSBjYWxscyB0byB0cmFuc2FjdGlvbi5v
YmplY3RTdG9yZShuYW1lKSBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDIwOAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hbmQtb2JqZWN0c3RvcmUt
Y2FsbHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0
aW9uLWFuZC1vYmplY3RzdG9yZS1jYWxscy5odG1sOgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhl
ZGRiL3R1dG9yaWFsLmh0bWw6CisKIDIwMTEtMTItMTUgIEtlbm5ldGggUnVzc2VsbCAgPGtickBn
b29nbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgQ2hyb21pdW0gdGVzdCBleHBlY3RhdGlv
bnMgdXBkYXRlOyBwdWxsIHVwIHNvbWUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL21vemlsbGEvb2JqZWN0LWlkZW50aXR5LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2JqZWN0LWlkZW50aXR5LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNmE0ZTk3MTQ5M2I4NDczNDViZjlkOWMwYjM2NzIzYzc0ZTY5N2UzCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9v
YmplY3QtaWRlbnRpdHktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzQgQEAKK1Rlc3QgSW5kZXhl
ZERCOiBvYmplY3QgaWRlbnRpdHkKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2lu
ZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3
aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQoraW5k
ZXhlZERCLm9wZW4obmFtZSwgZGVzY3JpcHRpb24pCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQK
K3JlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJykKK3RyYW5zYWN0aW9uID0gZXZlbnQudGFyZ2V0
LnRyYW5zYWN0aW9uOworRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KK29iamVjdFN0b3JlMSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nKTsKK29iamVjdFN0b3JlMiA9IHRyYW5zYWN0aW9u
Lm9iamVjdFN0b3JlKCdmb28nKTsKK1BBU1Mgb2JqZWN0U3RvcmUxID09PSBvYmplY3RTdG9yZTIg
aXMgdHJ1ZQoraW5kZXgxID0gb2JqZWN0U3RvcmUxLmNyZWF0ZUluZGV4KCdiYXInLCAna2V5Jyk7
CitpbmRleDIgPSBvYmplY3RTdG9yZTIuaW5kZXgoJ2JhcicpOworUEFTUyBpbmRleDEgPT09IGlu
ZGV4MiBpcyB0cnVlCit0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gdGVzdElkZW50aXR5U29tZU1v
cmU7Cit0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmb28nKTsKK29iamVjdFN0b3JlMyA9
IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmb28nKTsKK29iamVjdFN0b3JlNCA9IHRyYW5zYWN0
aW9uLm9iamVjdFN0b3JlKCdmb28nKTsKK1BBU1Mgb2JqZWN0U3RvcmUzID09PSBvYmplY3RTdG9y
ZTQgaXMgdHJ1ZQorUEFTUyBvYmplY3RTdG9yZTMgPT09IG9iamVjdFN0b3JlMSBpcyBmYWxzZQor
UEFTUyBvYmplY3RTdG9yZTQgPT09IG9iamVjdFN0b3JlMiBpcyBmYWxzZQoraW5kZXgzID0gb2Jq
ZWN0U3RvcmUzLmluZGV4KCdiYXInKTsKK2luZGV4NCA9IG9iamVjdFN0b3JlNC5pbmRleCgnYmFy
Jyk7CitQQVNTIGluZGV4MyA9PT0gaW5kZXg0IGlzIHRydWUKK1BBU1MgaW5kZXgzID09PSBpbmRl
eDEgaXMgZmFsc2UKK1BBU1MgaW5kZXg0ID09PSBpbmRleDIgaXMgZmFsc2UKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS5odG1sIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHkuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40ZGU5ZGFmOGI3ZjY0MDc5ODMwZDc0YTYxNTM1ZjFhYzcxMmI4NzA2Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9v
YmplY3QtaWRlbnRpdHkuaHRtbApAQCAtMCwwICsxLDgwIEBACis8IURPQ1RZUEUgaHRtbD4KKzwh
LS0KKyAgb3JpZ2luYWwgdGVzdDogaHR0cDovL214ci5tb3ppbGxhLm9yZy9tb3ppbGxhMi4wL3Nv
dXJjZS9kb20vaW5kZXhlZERCL3Rlc3QvdGVzdF9vYmplY3RfaWRlbnRpdHkuaHRtbD9mb3JjZT0x
CisgIGxpY2Vuc2Ugb2Ygb3JpZ2luYWwgdGVzdDoKKyAgICAiIEFueSBjb3B5cmlnaHQgaXMgZGVk
aWNhdGVkIHRvIHRoZSBQdWJsaWMgRG9tYWluLgorICAgICAgaHR0cDovL2NyZWF0aXZlY29tbW9u
cy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLyAiCistLT4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgSW5kZXhlZERCOiBvYmplY3Qg
aWRlbnRpdHkiKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAg
ICBpbmRleGVkREIgPSBldmFsQW5kTG9nKCJpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8
IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsiKTsKKyAgICBz
aG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOworCisgICAgbmFtZSA9IHdpbmRvdy5s
b2NhdGlvbi5wYXRobmFtZTsKKyAgICBkZXNjcmlwdGlvbiA9ICJNeSBUZXN0IERhdGFiYXNlIjsK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLm9wZW4obmFtZSwgZGVzY3JpcHRp
b24pIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBvcGVuU3VjY2VzczsKKyAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gb3BlblN1
Y2Nlc3MoKQoreworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0
Iik7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcx
JykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGNyZWF0ZU9iamVjdFN0b3JlQW5kSW5kZXg7
CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1
bmN0aW9uIGNyZWF0ZU9iamVjdFN0b3JlQW5kSW5kZXgoKQoreworICAgIHRyYW5zYWN0aW9uID0g
ZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBldmVudC50YXJnZXQudHJhbnNhY3Rpb247Iik7Cisg
ICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKyAgICBvYmplY3RTdG9yZTEgPSBldmFsQW5k
TG9nKCJvYmplY3RTdG9yZTEgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnZm9vJyk7Iik7CisgICAg
b2JqZWN0U3RvcmUyID0gZXZhbEFuZExvZygib2JqZWN0U3RvcmUyID0gdHJhbnNhY3Rpb24ub2Jq
ZWN0U3RvcmUoJ2ZvbycpOyIpOworICAgIHNob3VsZEJlVHJ1ZSgib2JqZWN0U3RvcmUxID09PSBv
YmplY3RTdG9yZTIiKTsKKyAgICBpbmRleDEgPSBldmFsQW5kTG9nKCJpbmRleDEgPSBvYmplY3RT
dG9yZTEuY3JlYXRlSW5kZXgoJ2JhcicsICdrZXknKTsiKTsKKyAgICBpbmRleDIgPSBldmFsQW5k
TG9nKCJpbmRleDIgPSBvYmplY3RTdG9yZTIuaW5kZXgoJ2JhcicpOyIpOworICAgIHNob3VsZEJl
VHJ1ZSgiaW5kZXgxID09PSBpbmRleDIiKTsKKyAgICBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbi5v
bmNvbXBsZXRlID0gdGVzdElkZW50aXR5U29tZU1vcmU7Iik7Cit9CisKK2Z1bmN0aW9uIHRlc3RJ
ZGVudGl0eVNvbWVNb3JlKCkKK3sKKyAgICB0cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coInRyYW5z
YWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ2ZvbycpOyIpOworICAgIG9iamVjdFN0b3JlMyA9IGV2
YWxBbmRMb2coIm9iamVjdFN0b3JlMyA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmb28nKTsi
KTsKKyAgICBvYmplY3RTdG9yZTQgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZTQgPSB0cmFuc2Fj
dGlvbi5vYmplY3RTdG9yZSgnZm9vJyk7Iik7CisgICAgc2hvdWxkQmVUcnVlKCJvYmplY3RTdG9y
ZTMgPT09IG9iamVjdFN0b3JlNCIpOworCisgICAgc2hvdWxkQmVGYWxzZSgib2JqZWN0U3RvcmUz
ID09PSBvYmplY3RTdG9yZTEiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJvYmplY3RTdG9yZTQgPT09
IG9iamVjdFN0b3JlMiIpOworCisgICAgaW5kZXgzID0gZXZhbEFuZExvZygiaW5kZXgzID0gb2Jq
ZWN0U3RvcmUzLmluZGV4KCdiYXInKTsiKTsKKyAgICBpbmRleDQgPSBldmFsQW5kTG9nKCJpbmRl
eDQgPSBvYmplY3RTdG9yZTQuaW5kZXgoJ2JhcicpOyIpOworICAgIHNob3VsZEJlVHJ1ZSgiaW5k
ZXgzID09PSBpbmRleDQiKTsKKworICAgIHNob3VsZEJlRmFsc2UoImluZGV4MyA9PT0gaW5kZXgx
Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXg0ID09PSBpbmRleDIiKTsKKworICAgIGRvbmUo
KTsKK30KKwordGVzdCgpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYW5kLW9iamVj
dHN0b3JlLWNhbGxzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3RyYW5zYWN0aW9uLWFuZC1vYmplY3RzdG9yZS1jYWxscy1leHBlY3RlZC50eHQKaW5kZXggZTky
MTFkYWUyMjE0MTQxYzQ4ZDRkNGIwMjkxOTllNmY4YjQwN2VkNy4uNTdiNzJkYmM5MmRiMmUwOTVh
NjUyNThhZTZkNjkzZjQ5ZTY5M2YxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9p
bmRleGVkZGIvdHJhbnNhY3Rpb24tYW5kLW9iamVjdHN0b3JlLWNhbGxzLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hbmQtb2JqZWN0
c3RvcmUtY2FsbHMtZXhwZWN0ZWQudHh0CkBAIC0xMiw2ICsxMiw3IEBAIHRyYW5zID0gZXZlbnQu
dGFyZ2V0LnJlc3VsdAogRGVsZXRlZCBhbGwgb2JqZWN0IHN0b3Jlcy4KIGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdhJykKIGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdiJykKK2RiLmNyZWF0ZU9iamVjdFN0
b3JlKCdzdG9yZScpLmNyZWF0ZUluZGV4KCdpbmRleCcsICdzb21lX3BhdGgnKQogdHJhbnMuYWRk
RXZlbnRMaXN0ZW5lcignY29tcGxldGUnLCBjcmVhdGVkLCB0cnVlKQogCiB0cmFucyA9IGRiLnRy
YW5zYWN0aW9uKFsnYSddKQpAQCAtMTA3LDYgKzEwOCwyMCBAQCBFeHBlY3RpbmcgZXhjZXB0aW9u
IGZyb20gZGIudHJhbnNhY3Rpb24oW3t0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAneCc7fX1d
KQogUEFTUyBFeGNlcHRpb24gd2FzIHRocm93bi4KIFBBU1MgY29kZSBpcyB3ZWJraXRJREJEYXRh
YmFzZUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJSCiAKK3RyYW5zID0gZGIudHJhbnNhY3Rpb24oWydz
dG9yZSddKQorUEFTUyB0cmFucyAhPSBudWxsIGlzIHRydWUKK3N0b3JlID0gdHJhbnMub2JqZWN0
U3RvcmUoJ3N0b3JlJykKK1BBU1Mgc3RvcmUgIT0gbnVsbCBpcyB0cnVlCitzdG9yZS5nZXQoJ3Nv
bWVfa2V5JykKK3RyYW5zYWN0aW9uIGNvbXBsZXRlLCBlbnN1cmluZyBtZXRob2RzIGZhaWwKK1BB
U1MgdHJhbnMgIT0gbnVsbCBpcyB0cnVlCitQQVNTIHN0b3JlICE9IG51bGwgaXMgdHJ1ZQorRXhw
ZWN0aW5nIGV4Y2VwdGlvbiBmcm9tIHRyYW5zLm9iamVjdFN0b3JlKCdzdG9yZScpCitQQVNTIEV4
Y2VwdGlvbiB3YXMgdGhyb3duLgorUEFTUyBjb2RlIGlzIHdlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLk5PVF9BTExPV0VEX0VSUgorRXhwZWN0aW5nIGV4Y2VwdGlvbiBmcm9tIHN0b3JlLmluZGV4
KCdpbmRleCcpCitQQVNTIEV4Y2VwdGlvbiB3YXMgdGhyb3duLgorUEFTUyBjb2RlIGlzIHdlYmtp
dElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9BTExPV0VEX0VSUgogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hbmQtb2JqZWN0c3RvcmUtY2FsbHMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFuZC1vYmplY3RzdG9y
ZS1jYWxscy5odG1sCmluZGV4IGM2ZWJkMjE2NTNlZDFlODkwMjBmNzcwYzc1ODc3NGE5MzNmMGNj
NjEuLmNkNTBlNjFjZTY1NGQwMzQzZmQ1OTU4ZWQzZDJmZDBkYjUyOWNlOWEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFuZC1vYmplY3RzdG9y
ZS1jYWxscy5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0
aW9uLWFuZC1vYmplY3RzdG9yZS1jYWxscy5odG1sCkBAIC0zNyw2ICszNyw3IEBAIGZ1bmN0aW9u
IGNsZWFuRGF0YWJhc2UoKQogCiAgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUo
J2EnKSIpOwogICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdiJykiKTsKKyAg
ICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKS5jcmVhdGVJbmRleCgn
aW5kZXgnLCAnc29tZV9wYXRoJykiKTsKICAgICBldmFsQW5kTG9nKCJ0cmFucy5hZGRFdmVudExp
c3RlbmVyKCdjb21wbGV0ZScsIGNyZWF0ZWQsIHRydWUpIik7CiAgICAgZGVidWcoIiIpOwogfQpA
QCAtMTA1LDExICsxMDYsMjggQEAgZnVuY3Rpb24gY3JlYXRlZCgpCiAgICAgZGVidWcoIi4uLiBi
dXQgeW91IHN0aWxsIG5lZWQgdG8gc3BlY2lmeSBhIHJlYWwgc3RvcmU6Iik7CiAgICAgZXZhbEFu
ZEV4cGVjdEV4Y2VwdGlvbigiZGIudHJhbnNhY3Rpb24oW3t0b1N0cmluZzpmdW5jdGlvbigpe3Jl
dHVybiAneCc7fX1dKSIsICJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT1RfRk9VTkRfRVJS
Iik7CiAgICAgZXZhbEFuZEV4cGVjdEV4Y2VwdGlvbigiZGIudHJhbnNhY3Rpb24oW3t0b1N0cmlu
ZzpmdW5jdGlvbigpe3JldHVybiAneCc7fX1dKSIsICJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlv
bi5OT1RfRk9VTkRfRVJSIik7Ci0KICAgICBkZWJ1ZygiIik7Ci0gICAgZG9uZSgpOworCisgICAg
dHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGRiLnRyYW5zYWN0aW9uKFsnc3RvcmUnXSkiKTsK
KyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9IG51bGwiKTsKKyAgICB0cmFucy5vbmFib3J0ID0g
dW5leHBlY3RlZEFib3J0Q2FsbGJhY2s7CisgICAgdHJhbnMub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOworICAgIHRyYW5zLm9uY29tcGxldGUgPSBhZnRlckNvbXBsZXRlOworICAg
IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykiKTsKKyAgICBz
aG91bGRCZVRydWUoInN0b3JlICE9IG51bGwiKTsKKyAgICBldmFsQW5kTG9nKCJzdG9yZS5nZXQo
J3NvbWVfa2V5JykiKTsKIH0KIAorZnVuY3Rpb24gYWZ0ZXJDb21wbGV0ZSgpCit7CisgICAgZGVi
dWcoInRyYW5zYWN0aW9uIGNvbXBsZXRlLCBlbnN1cmluZyBtZXRob2RzIGZhaWwiKTsKKyAgICBz
aG91bGRCZVRydWUoInRyYW5zICE9IG51bGwiKTsKKyAgICBzaG91bGRCZVRydWUoInN0b3JlICE9
IG51bGwiKTsKKyAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJ0cmFucy5vYmplY3RTdG9yZSgn
c3RvcmUnKSIsICJ3ZWJraXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT1RfQUxMT1dFRF9FUlIiKTsK
KyAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJzdG9yZS5pbmRleCgnaW5kZXgnKSIsICJ3ZWJr
aXRJREJEYXRhYmFzZUV4Y2VwdGlvbi5OT1RfQUxMT1dFRF9FUlIiKTsKKworICAgIGRvbmUoKTsK
K30KIAogdGVzdCgpOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi90dXRvcmlhbC5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwu
aHRtbAppbmRleCAzYzA0ODUyZmYxYjU5MjAwYTdkZTZjMzdkMTlhMWEyYTg3YmVhMzhkLi41Y2Rj
ZGIyZTQzMGM4ZTQ5ODVkZDk0NGNmN2ZmZTJjNmU5ZTNjMmMzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLmh0bWwKQEAgLTMxMiwxMCArMzEyLDEwIEBAIGZ1bmN0
aW9uIG9uUHV0VHJhbnNhY3Rpb25Db21wbGV0ZSgpCiAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBv
bkdldFN1Y2Nlc3M7CiAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yOwogCi0g
ICAgLy8gTm90ZSB0aGF0IG11bHRpcGxlIG9iamVjdFN0b3JlIChvciBpbmRleCkgbWV0aG9kIGNh
bGxzIHdpbGwgcmV0dXJuIGRpZmZlcmVudCBvYmplY3RzICh0aGF0IHN0aWxsCi0gICAgLy8gcmVm
ZXIgdG8gdGhlIHNhbWUgb2JqZWN0U3RvcmUvaW5kZXggb24gZGlzaykuCi0gICAgcGVvcGxlLnNv
bWVQcm9wZXJ0eSA9IHRydWU7Ci0gICAgaWYgKGN1cnJlbnRUcmFuc2FjdGlvbi5vYmplY3RTdG9y
ZSgicGVvcGxlIikuc29tZVByb3BlcnR5KQorICAgIC8vIE5vdGUgdGhhdCBtdWx0aXBsZSBvYmpl
Y3RTdG9yZSAob3IgaW5kZXgpIG1ldGhvZCBjYWxscyB3aWxsIHJldHVybiB0aGUgc2FtZSBvYmpl
Y3QsIHdpdGhpbgorICAgIC8vIGEgdHJhbnNhY3Rpb246CisgICAgcGVvcGxlLnNvbWVQcm9wZXJ0
eSA9ICJ4eXoiOworICAgIGlmIChjdXJyZW50VHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoInBlb3Bs
ZSIpLnNvbWVQcm9wZXJ0eSAhPSAieHl6IikKICAgICAgICAgbG9nRXJyb3IoIlNvbWV0aGluZyB3
ZW50IHdyb25nLiIpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119907</attachid>
            <date>2011-12-19 13:06:10 -0800</date>
            <delta_ts>2011-12-19 16:57:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60208-20111219130609.patch</filename>
            <type>text/plain</type>
            <size>19230</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyOTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNkMTI3NjgyZTA1Yjkz
MDFiZTljY2I5YjJkNmZhMjJmMDllNDg0Yy4uYzZkZDEwMmM1MTM4YjZhZWU5Y2ExZjhiZTIzZTE1
YWNmMDI0YzI2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTEyLTE2ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCIG11bHRp
cGxlIGNhbGxzIHRvIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKG5hbWUpIHNob3VsZCByZXR1cm4g
dGhlIHNhbWUgaW5zdGFuY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwMjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRGl0dG8gZm9yIGNhbGxzIHRvIElEQk9iamVjdFN0b3JlLmluZGV4KCkuIENhbGxp
bmcgdGhlc2UgbWV0aG9kcyBhZnRlciB0aGUKKyAgICAgICAgZW5jbG9zaW5nIHRyYW5zYWN0aW9u
IGhhcyBmaW5pc2hlZCBub3cgY29uc2lzdGVudGx5IHRocm93cyBhbiBlcnJvciwgd2hpY2gKKyAg
ICAgICAgYWxsb3dzIHVzIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisKKyAgICAgICAgVGVz
dDogc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHkuaHRtbAorCisgICAg
ICAgICogc3RvcmFnZS9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCk6CisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZUNyZWF0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAq
IHN0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaDoKKwogMjAxMS0xMi0xNSAgS2VudGFybyBIYXJhICA8
aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTAyNjYzKTogZ2Vu
ZXJhdGUtYmluZGluZ3MucGwgcnVucyBldmVyeSB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RGF0YWJhc2UuY3BwCmluZGV4IDE5MWE0NWNkZTYwZmE4MDMwMjIxMTVmNzE0ZTA0NzUwMzBiOTc0
NDcuLjE1OTVjNTkyYzdjNjk5MDJlYTYyMGJlOTVmMzFiMmVjZWQxZGFmOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2UuY3BwCkBAIC0xMDAsMTIgKzEwMCwxNSBAQCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjbwogICAgIG9wdGlvbnMuZ2V0KCJhdXRvSW5jcmVtZW50IiwgYXV0b0lu
Y3JlbWVudCk7CiAgICAgLy8gRklYTUU6IExvb2sgdXAgZXZpY3RhYmxlIGFuZCBwYXNzIHRoYXQg
b24gYXMgd2VsbC4KIAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+
IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZShuYW1lLCBrZXlQYXRo
LCBhdXRvSW5jcmVtZW50LCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkgeworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+Y3JlYXRlT2Jq
ZWN0U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgbV92ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIGlmICghb2JqZWN0U3RvcmVCYWNrZW5kKSB7
CiAgICAgICAgIEFTU0VSVChlYyk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1
cm4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShvYmplY3RTdG9yZS5yZWxlYXNlKCksIG1fdmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKworICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4g
b2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG9iamVjdFN0b3JlQmFja2VuZC5y
ZWxlYXNlKCksIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3Jl
KTsKKyAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwogfQogCiB2b2lkIElEQkRhdGFi
YXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQpAQCAtMTE2LDYgKzExOSw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgfQogCiAgICAg
bV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPm9i
amVjdFN0b3JlRGVsZXRlZChuYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdD4gSURCRGF0YWJhc2U6OnNldFZlcnNpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXggYzkwODZlNWNiNmRkNjNk
NTE5MjBhZTIyZmQwMjdkODQ0MmFkMDhlOS4uNGZiOGZhOGYwNTEwNmVmNmJiYWQwYTAyOTJlY2E2
NTI0NmZkMTA1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RT
dG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTE2MywyMCArMTYzLDM0IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluCiAKICAgICAvLyBG
SVhNRTogV2hlbiBBcnJheS10eXBlIGtleVBhdGhzIGFyZSBzdXBwb3J0ZWQsIHRocm93IGV4Y2Vw
dGlvbiBpZiBrZXlQYXRoIGlzIEFycmF5IGFuZCBtdWx0aUVudHJ5IGlzIHRydWUuCiAKLSAgICBS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fYmFja2VuZC0+Y3JlYXRl
SW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBtX3RyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKLSAgICBBU1NFUlQoIWluZGV4ICE9ICFlYyk7IC8vIElmIHdlIGRpZG4n
dCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4g
QW5kIHZpY2UgdmVyc2EuCi0gICAgaWYgKCFpbmRleCkKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmNyZWF0ZUluZGV4KG5hbWUs
IGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBl
Yyk7CisgICAgQVNTRVJUKCFpbmRleEJhY2tlbmQgIT0gIWVjKTsgLy8gSWYgd2UgZGlkbid0IGdl
dCBhbiBpbmRleCwgd2Ugc2hvdWxkIGhhdmUgZ290dGVuIGFuIGV4Y2VwdGlvbiBjb2RlLiBBbmQg
dmljZSB2ZXJzYS4KKyAgICBpZiAoIWluZGV4QmFja2VuZCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIElEQkluZGV4OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8SURCSW5kZXg+IGluZGV4ID0gSURCSW5kZXg6OmNy
ZWF0ZShpbmRleEJhY2tlbmQucmVsZWFzZSgpLCB0aGlzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
KyAgICBtX2luZGV4TWFwLnNldChuYW1lLCBpbmRleCk7CisgICAgcmV0dXJuIGluZGV4LnJlbGVh
c2UoKTsKIH0KIAogUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmluZGV4KGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX2JhY2tlbmQtPmluZGV4KG5hbWUsIGVjKTsK
LSAgICBBU1NFUlQoIWluZGV4ICE9ICFlYyk7IC8vIElmIHdlIGRpZG4ndCBnZXQgYW4gaW5kZXgs
IHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29kZS4gQW5kIHZpY2UgdmVyc2Eu
Ci0gICAgaWYgKCFpbmRleCkKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+ZmluaXNoZWQoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dFRF9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwotICAgIHJldHVybiBJREJJbmRleDo6Y3JlYXRlKGluZGV4LnJlbGVhc2Uo
KSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgSURCSW5kZXhNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOworICAgIGlmIChpdCAhPSBtX2lu
ZGV4TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKworICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgo
bmFtZSwgZWMpOworICAgIEFTU0VSVCghaW5kZXhCYWNrZW5kICE9ICFlYyk7IC8vIElmIHdlIGRp
ZG4ndCBnZXQgYW4gaW5kZXgsIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBhbiBleGNlcHRpb24gY29k
ZS4gQW5kIHZpY2UgdmVyc2EuCisgICAgaWYgKCFpbmRleEJhY2tlbmQpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IElEQkluZGV4OjpjcmVhdGUoaW5k
ZXhCYWNrZW5kLnJlbGVhc2UoKSwgdGhpcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9p
bmRleE1hcC5zZXQobmFtZSwgaW5kZXgpOworICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9
CiAKIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0yMDIsNiArMjE2LDE1IEBAIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCit2b2lkIElEQk9iamVj
dFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkKK3sKKyAgICBBU1NFUlQobV90cmFuc2FjdGlv
bi0+ZmluaXNoZWQoKSk7CisKKyAgICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIG1f
aW5kZXhNYXAuY2xlYXIoKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2Jq
ZWN0U3RvcmUuaAppbmRleCA5YjVhYTZiMmQzZjUzNzMxYmM2MTY1OWI5NjU2YzM2MzQ5YmNmMjZi
Li44MzU3ODUxYjlmYWM5Y2I3MzczODViYzhkYzViNGM3MmMwZTcyMTQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oCkBAIC03OSwxMiArNzksMTcgQEAgcHVibGljOgog
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
LCBFeGNlcHRpb25Db2RlJik7IAogCisgICAgdm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkKCk7CisK
IHByaXZhdGU6CiAgICAgSURCT2JqZWN0U3RvcmUoUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgcmVtb3ZlVHJhbnNh
Y3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJh
bnNhY3Rpb247CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SURCSW5kZXg+
ID4gSURCSW5kZXhNYXA7CisgICAgSURCSW5kZXhNYXAgbV9pbmRleE1hcDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5j
cHAKaW5kZXggYTFkNDFlNjRmODJiYTVjOGEwOGY2ZTk0MWVjYTM5MTQ0Nzk3NTYwZi4uMTQwZGYw
NWFhZDk1YWM1NWU3NDcwNTU5OTMwNjgzZWI4NDEzZjFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTg3LDE1ICs4NywzMyBAQCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcAogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfQUxMT1dF
RF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKworICAgIElEQk9iamVjdFN0b3JlTWFw
OjppdGVyYXRvciBpdCA9IG1fb2JqZWN0U3RvcmVNYXAuZmluZChuYW1lKTsKKyAgICBpZiAoaXQg
IT0gbV9vYmplY3RTdG9yZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisK
ICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJh
Y2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKICAgICBpZiAoIW9iamVj
dFN0b3JlQmFja2VuZCkgewogICAgICAgICBBU1NFUlQoZWMpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVj
dFN0b3JlOjpjcmVhdGUob2JqZWN0U3RvcmVCYWNrZW5kLCB0aGlzKTsKKyAgICBvYmplY3RTdG9y
ZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3RvcmUpOwogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxl
YXNlKCk7CiB9CiAKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlKQor
eworICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAgICBtX29iamVjdFN0b3Jl
TWFwLnNldChuYW1lLCBvYmplY3RTdG9yZSk7Cit9CisKK3ZvaWQgSURCVHJhbnNhY3Rpb246Om9i
amVjdFN0b3JlRGVsZXRlZChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgQVNTRVJUKCFtX3Ry
YW5zYWN0aW9uRmluaXNoZWQpOworICAgIG1fb2JqZWN0U3RvcmVNYXAucmVtb3ZlKG5hbWUpOwor
fQorCiB2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydCgpCiB7CiAgICAgaWYgKG1fdHJhbnNhY3Rp
b25GaW5pc2hlZCkKQEAgLTE3MSw2ICsxODksMTEgQEAgYm9vbCBJREJUcmFuc2FjdGlvbjo6ZGlz
cGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBBU1NFUlQoZXZlbnQtPnRh
cmdldCgpID09IHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25GaW5pc2hlZCA9IHRydWU7CiAKKyAg
ICAvLyBCcmVhayByZWZlcmVuY2UgY3ljbGVzLgorICAgIGZvciAoSURCT2JqZWN0U3RvcmVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0
b3JlTWFwLmVuZCgpOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25kLT50cmFuc2FjdGlvbkZpbmlz
aGVkKCk7CisgICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOworCiAgICAgVmVjdG9yPFJlZlB0
cjxFdmVudFRhcmdldD4gPiB0YXJnZXRzOwogICAgIHRhcmdldHMuYXBwZW5kKHRoaXMpOwogICAg
IHRhcmdldHMuYXBwZW5kKGRiKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bi5oCmluZGV4IGNlYzQ2ZDZiYTY5ZTFkOTdmOTUwZTdmY2I0OGFkMzgxYTIxYWYwYzIuLjFkMzRj
YzNiZDQwMzM3OTg5MjA2OTFjMDBiYTg5OWFkMTIwZTI4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCByZWdpc3RlclJlcXVlc3QoSURCUmVxdWVzdCopOwogICAgIHZvaWQgdW5yZWdpc3RlclJlcXVl
c3QoSURCUmVxdWVzdCopOworICAgIHZvaWQgb2JqZWN0U3RvcmVDcmVhdGVkKGNvbnN0IFN0cmlu
ZyYsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+KTsKKyAgICB2b2lkIG9iamVjdFN0b3JlRGVs
ZXRlZChjb25zdCBTdHJpbmcmKTsKIAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoYWJvcnQpOwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY29tcGxldGUp
OwpAQCAtMTA2LDYgKzEwOCw5IEBAIHByaXZhdGU6CiAKICAgICBMaXN0SGFzaFNldDxJREJSZXF1
ZXN0Kj4gbV9jaGlsZFJlcXVlc3RzOwogCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVm
UHRyPElEQk9iamVjdFN0b3JlPiA+IElEQk9iamVjdFN0b3JlTWFwOworICAgIElEQk9iamVjdFN0
b3JlTWFwIG1fb2JqZWN0U3RvcmVNYXA7CisKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmZiYWZkZTZjMGIzZDhiNDY3ZWZjYjg5YjkxMzdiYTY4
OTU4Njc0Mi4uYTViMDYzOWYwY2IyNmY3M2VkNjhmZWRkODA1N2UxNGFlZjg3MDM4OCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDExLTEyLTE2ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCIG11bHRpcGxlIGNhbGxzIHRvIHRyYW5zYWN0aW9u
Lm9iamVjdFN0b3JlKG5hbWUpIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYwMjA4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2JqZWN0LWlkZW50aXR5Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFuZC1vYmplY3RzdG9y
ZS1jYWxscy1leHBlY3RlZC50eHQ6CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNh
Y3Rpb24tYW5kLW9iamVjdHN0b3JlLWNhbGxzLmh0bWw6CisgICAgICAgICogc3RvcmFnZS9pbmRl
eGVkZGIvdHV0b3JpYWwuaHRtbDoKKwogMjAxMS0xMi0xNSAgS2VubmV0aCBSdXNzZWxsICA8a2Jy
QGdvb2dsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBDaHJvbWl1bSB0ZXN0IGV4cGVjdGF0
aW9ucyB1cGRhdGU7IHB1bGwgdXAgc29tZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvbW96aWxsYS9vYmplY3QtaWRlbnRpdHktZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI2YTRlOTcxNDkzYjg0NzM0NWJmOWQ5YzBiMzY3MjNjNzRlNjk3ZTMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxh
L29iamVjdC1pZGVudGl0eS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNCBAQAorVGVzdCBJbmRl
eGVkREI6IG9iamVjdCBpZGVudGl0eQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
aW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8
IHdpbmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCitp
bmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dAorcmVxdWVzdCA9IGRiLnNldFZlcnNpb24oJzEnKQordHJhbnNhY3Rpb24gPSBldmVudC50YXJn
ZXQudHJhbnNhY3Rpb247CitEZWxldGVkIGFsbCBvYmplY3Qgc3RvcmVzLgorb2JqZWN0U3RvcmUx
ID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2ZvbycpOworb2JqZWN0U3RvcmUyID0gdHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoJ2ZvbycpOworUEFTUyBvYmplY3RTdG9yZTEgPT09IG9iamVjdFN0b3Jl
MiBpcyB0cnVlCitpbmRleDEgPSBvYmplY3RTdG9yZTEuY3JlYXRlSW5kZXgoJ2JhcicsICdrZXkn
KTsKK2luZGV4MiA9IG9iamVjdFN0b3JlMi5pbmRleCgnYmFyJyk7CitQQVNTIGluZGV4MSA9PT0g
aW5kZXgyIGlzIHRydWUKK3RyYW5zYWN0aW9uLm9uY29tcGxldGUgPSB0ZXN0SWRlbnRpdHlTb21l
TW9yZTsKK3RyYW5zYWN0aW9uID0gZGIudHJhbnNhY3Rpb24oJ2ZvbycpOworb2JqZWN0U3RvcmUz
ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZvbycpOworb2JqZWN0U3RvcmU0ID0gdHJhbnNh
Y3Rpb24ub2JqZWN0U3RvcmUoJ2ZvbycpOworUEFTUyBvYmplY3RTdG9yZTMgPT09IG9iamVjdFN0
b3JlNCBpcyB0cnVlCitQQVNTIG9iamVjdFN0b3JlMyA9PT0gb2JqZWN0U3RvcmUxIGlzIGZhbHNl
CitQQVNTIG9iamVjdFN0b3JlNCA9PT0gb2JqZWN0U3RvcmUyIGlzIGZhbHNlCitpbmRleDMgPSBv
YmplY3RTdG9yZTMuaW5kZXgoJ2JhcicpOworaW5kZXg0ID0gb2JqZWN0U3RvcmU0LmluZGV4KCdi
YXInKTsKK1BBU1MgaW5kZXgzID09PSBpbmRleDQgaXMgdHJ1ZQorUEFTUyBpbmRleDMgPT09IGlu
ZGV4MSBpcyBmYWxzZQorUEFTUyBpbmRleDQgPT09IGluZGV4MiBpcyBmYWxzZQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL21vemlsbGEvb2JqZWN0LWlkZW50aXR5Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxhL29iamVjdC1pZGVudGl0eS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRkZTlkYWY4YjdmNjQwNzk4MzBkNzRhNjE1MzVmMWFjNzEyYjg3MDYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9tb3ppbGxh
L29iamVjdC1pZGVudGl0eS5odG1sCkBAIC0wLDAgKzEsODAgQEAKKzwhRE9DVFlQRSBodG1sPgor
PCEtLQorICBvcmlnaW5hbCB0ZXN0OiBodHRwOi8vbXhyLm1vemlsbGEub3JnL21vemlsbGEyLjAv
c291cmNlL2RvbS9pbmRleGVkREIvdGVzdC90ZXN0X29iamVjdF9pZGVudGl0eS5odG1sP2ZvcmNl
PTEKKyAgbGljZW5zZSBvZiBvcmlnaW5hbCB0ZXN0OgorICAgICIgQW55IGNvcHlyaWdodCBpcyBk
ZWRpY2F0ZWQgdG8gdGhlIFB1YmxpYyBEb21haW4uCisgICAgICBodHRwOi8vY3JlYXRpdmVjb21t
b25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvICIKKy0tPgorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCBJbmRleGVkREI6IG9iamVj
dCBpZGVudGl0eSIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIg
fHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAg
IHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisKKyAgICBuYW1lID0gd2luZG93
LmxvY2F0aW9uLnBhdGhuYW1lOworICAgIGRlc2NyaXB0aW9uID0gIk15IFRlc3QgRGF0YWJhc2Ui
OworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlw
dGlvbikiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5TdWNjZXNzOworICAgIHJlcXVl
c3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBvcGVu
U3VjY2VzcygpCit7CisgICAgZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1
bHQiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IGRiLnNldFZlcnNpb24o
JzEnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gY3JlYXRlT2JqZWN0U3RvcmVBbmRJbmRl
eDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gY3JlYXRlT2JqZWN0U3RvcmVBbmRJbmRleCgpCit7CisgICAgdHJhbnNhY3Rpb24g
PSBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGV2ZW50LnRhcmdldC50cmFuc2FjdGlvbjsiKTsK
KyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOworICAgIG9iamVjdFN0b3JlMSA9IGV2YWxB
bmRMb2coIm9iamVjdFN0b3JlMSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmb28nKTsiKTsKKyAg
ICBvYmplY3RTdG9yZTIgPSBldmFsQW5kTG9nKCJvYmplY3RTdG9yZTIgPSB0cmFuc2FjdGlvbi5v
YmplY3RTdG9yZSgnZm9vJyk7Iik7CisgICAgc2hvdWxkQmVUcnVlKCJvYmplY3RTdG9yZTEgPT09
IG9iamVjdFN0b3JlMiIpOworICAgIGluZGV4MSA9IGV2YWxBbmRMb2coImluZGV4MSA9IG9iamVj
dFN0b3JlMS5jcmVhdGVJbmRleCgnYmFyJywgJ2tleScpOyIpOworICAgIGluZGV4MiA9IGV2YWxB
bmRMb2coImluZGV4MiA9IG9iamVjdFN0b3JlMi5pbmRleCgnYmFyJyk7Iik7CisgICAgc2hvdWxk
QmVUcnVlKCJpbmRleDEgPT09IGluZGV4MiIpOworICAgIGV2YWxBbmRMb2coInRyYW5zYWN0aW9u
Lm9uY29tcGxldGUgPSB0ZXN0SWRlbnRpdHlTb21lTW9yZTsiKTsKK30KKworZnVuY3Rpb24gdGVz
dElkZW50aXR5U29tZU1vcmUoKQoreworICAgIHRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygidHJh
bnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZm9vJyk7Iik7CisgICAgb2JqZWN0U3RvcmUzID0g
ZXZhbEFuZExvZygib2JqZWN0U3RvcmUzID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2Zvbycp
OyIpOworICAgIG9iamVjdFN0b3JlNCA9IGV2YWxBbmRMb2coIm9iamVjdFN0b3JlNCA9IHRyYW5z
YWN0aW9uLm9iamVjdFN0b3JlKCdmb28nKTsiKTsKKyAgICBzaG91bGRCZVRydWUoIm9iamVjdFN0
b3JlMyA9PT0gb2JqZWN0U3RvcmU0Iik7CisKKyAgICBzaG91bGRCZUZhbHNlKCJvYmplY3RTdG9y
ZTMgPT09IG9iamVjdFN0b3JlMSIpOworICAgIHNob3VsZEJlRmFsc2UoIm9iamVjdFN0b3JlNCA9
PT0gb2JqZWN0U3RvcmUyIik7CisKKyAgICBpbmRleDMgPSBldmFsQW5kTG9nKCJpbmRleDMgPSBv
YmplY3RTdG9yZTMuaW5kZXgoJ2JhcicpOyIpOworICAgIGluZGV4NCA9IGV2YWxBbmRMb2coImlu
ZGV4NCA9IG9iamVjdFN0b3JlNC5pbmRleCgnYmFyJyk7Iik7CisgICAgc2hvdWxkQmVUcnVlKCJp
bmRleDMgPT09IGluZGV4NCIpOworCisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXgzID09PSBpbmRl
eDEiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJpbmRleDQgPT09IGluZGV4MiIpOworCisgICAgZG9u
ZSgpOworfQorCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hbmQtb2Jq
ZWN0c3RvcmUtY2FsbHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvdHJhbnNhY3Rpb24tYW5kLW9iamVjdHN0b3JlLWNhbGxzLWV4cGVjdGVkLnR4dAppbmRleCBl
OTIxMWRhZTIyMTQxNDFjNDhkNGQ0YjAyOTE5OWU2ZjhiNDA3ZWQ3Li41N2I3MmRiYzkyZGIyZTA5
NWE2NTI1OGFlNmQ2OTNmNDllNjkzZjE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi90cmFuc2FjdGlvbi1hbmQtb2JqZWN0c3RvcmUtY2FsbHMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFuZC1vYmpl
Y3RzdG9yZS1jYWxscy1leHBlY3RlZC50eHQKQEAgLTEyLDYgKzEyLDcgQEAgdHJhbnMgPSBldmVu
dC50YXJnZXQucmVzdWx0CiBEZWxldGVkIGFsbCBvYmplY3Qgc3RvcmVzLgogZGIuY3JlYXRlT2Jq
ZWN0U3RvcmUoJ2EnKQogZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2InKQorZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlJykuY3JlYXRlSW5kZXgoJ2luZGV4JywgJ3NvbWVfcGF0aCcpCiB0cmFucy5h
ZGRFdmVudExpc3RlbmVyKCdjb21wbGV0ZScsIGNyZWF0ZWQsIHRydWUpCiAKIHRyYW5zID0gZGIu
dHJhbnNhY3Rpb24oWydhJ10pCkBAIC0xMDcsNiArMTA4LDIwIEBAIEV4cGVjdGluZyBleGNlcHRp
b24gZnJvbSBkYi50cmFuc2FjdGlvbihbe3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuICd4Jzt9
fV0pCiBQQVNTIEV4Y2VwdGlvbiB3YXMgdGhyb3duLgogUEFTUyBjb2RlIGlzIHdlYmtpdElEQkRh
dGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9FUlIKIAordHJhbnMgPSBkYi50cmFuc2FjdGlvbihb
J3N0b3JlJ10pCitQQVNTIHRyYW5zICE9IG51bGwgaXMgdHJ1ZQorc3RvcmUgPSB0cmFucy5vYmpl
Y3RTdG9yZSgnc3RvcmUnKQorUEFTUyBzdG9yZSAhPSBudWxsIGlzIHRydWUKK3N0b3JlLmdldCgn
c29tZV9rZXknKQordHJhbnNhY3Rpb24gY29tcGxldGUsIGVuc3VyaW5nIG1ldGhvZHMgZmFpbAor
UEFTUyB0cmFucyAhPSBudWxsIGlzIHRydWUKK1BBU1Mgc3RvcmUgIT0gbnVsbCBpcyB0cnVlCitF
eHBlY3RpbmcgZXhjZXB0aW9uIGZyb20gdHJhbnMub2JqZWN0U3RvcmUoJ3N0b3JlJykKK1BBU1Mg
RXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgd2Via2l0SURCRGF0YWJhc2VFeGNl
cHRpb24uTk9UX0FMTE9XRURfRVJSCitFeHBlY3RpbmcgZXhjZXB0aW9uIGZyb20gc3RvcmUuaW5k
ZXgoJ2luZGV4JykKK1BBU1MgRXhjZXB0aW9uIHdhcyB0aHJvd24uCitQQVNTIGNvZGUgaXMgd2Vi
a2l0SURCRGF0YWJhc2VFeGNlcHRpb24uTk9UX0FMTE9XRURfRVJSCiBQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL3RyYW5zYWN0aW9uLWFuZC1vYmplY3RzdG9yZS1jYWxscy5odG1s
IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYW5kLW9iamVjdHN0
b3JlLWNhbGxzLmh0bWwKaW5kZXggYzZlYmQyMTY1M2VkMWU4OTAyMGY3NzBjNzU4Nzc0YTkzM2Yw
Y2M2MS4uY2Q1MGU2MWNlNjU0ZDAzNDNmZDU5NThlZDNkMmZkMGRiNTI5Y2U5YSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tYW5kLW9iamVjdHN0
b3JlLWNhbGxzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNh
Y3Rpb24tYW5kLW9iamVjdHN0b3JlLWNhbGxzLmh0bWwKQEAgLTM3LDYgKzM3LDcgQEAgZnVuY3Rp
b24gY2xlYW5EYXRhYmFzZSgpCiAKICAgICBldmFsQW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9y
ZSgnYScpIik7CiAgICAgZXZhbEFuZExvZygiZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2InKSIpOwor
ICAgIGV2YWxBbmRMb2coImRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZScpLmNyZWF0ZUluZGV4
KCdpbmRleCcsICdzb21lX3BhdGgnKSIpOwogICAgIGV2YWxBbmRMb2coInRyYW5zLmFkZEV2ZW50
TGlzdGVuZXIoJ2NvbXBsZXRlJywgY3JlYXRlZCwgdHJ1ZSkiKTsKICAgICBkZWJ1ZygiIik7CiB9
CkBAIC0xMDUsMTEgKzEwNiwyOCBAQCBmdW5jdGlvbiBjcmVhdGVkKCkKICAgICBkZWJ1ZygiLi4u
IGJ1dCB5b3Ugc3RpbGwgbmVlZCB0byBzcGVjaWZ5IGEgcmVhbCBzdG9yZToiKTsKICAgICBldmFs
QW5kRXhwZWN0RXhjZXB0aW9uKCJkYi50cmFuc2FjdGlvbihbe3RvU3RyaW5nOmZ1bmN0aW9uKCl7
cmV0dXJuICd4Jzt9fV0pIiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9GT1VORF9F
UlIiKTsKICAgICBldmFsQW5kRXhwZWN0RXhjZXB0aW9uKCJkYi50cmFuc2FjdGlvbihbe3RvU3Ry
aW5nOmZ1bmN0aW9uKCl7cmV0dXJuICd4Jzt9fV0pIiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0
aW9uLk5PVF9GT1VORF9FUlIiKTsKLQogICAgIGRlYnVnKCIiKTsKLSAgICBkb25lKCk7CisKKyAg
ICB0cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZGIudHJhbnNhY3Rpb24oWydzdG9yZSddKSIp
OworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT0gbnVsbCIpOworICAgIHRyYW5zLm9uYWJvcnQg
PSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICB0cmFucy5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7CisgICAgdHJhbnMub25jb21wbGV0ZSA9IGFmdGVyQ29tcGxldGU7Cisg
ICAgZXZhbEFuZExvZygic3RvcmUgPSB0cmFucy5vYmplY3RTdG9yZSgnc3RvcmUnKSIpOworICAg
IHNob3VsZEJlVHJ1ZSgic3RvcmUgIT0gbnVsbCIpOworICAgIGV2YWxBbmRMb2coInN0b3JlLmdl
dCgnc29tZV9rZXknKSIpOwogfQogCitmdW5jdGlvbiBhZnRlckNvbXBsZXRlKCkKK3sKKyAgICBk
ZWJ1ZygidHJhbnNhY3Rpb24gY29tcGxldGUsIGVuc3VyaW5nIG1ldGhvZHMgZmFpbCIpOworICAg
IHNob3VsZEJlVHJ1ZSgidHJhbnMgIT0gbnVsbCIpOworICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUg
IT0gbnVsbCIpOworICAgIGV2YWxBbmRFeHBlY3RFeGNlcHRpb24oInRyYW5zLm9iamVjdFN0b3Jl
KCdzdG9yZScpIiwgIndlYmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9BTExPV0VEX0VSUiIp
OworICAgIGV2YWxBbmRFeHBlY3RFeGNlcHRpb24oInN0b3JlLmluZGV4KCdpbmRleCcpIiwgIndl
YmtpdElEQkRhdGFiYXNlRXhjZXB0aW9uLk5PVF9BTExPV0VEX0VSUiIpOworCisgICAgZG9uZSgp
OworfQogCiB0ZXN0KCk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL3R1dG9yaWFsLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi90dXRvcmlh
bC5odG1sCmluZGV4IDNjMDQ4NTJmZjFiNTkyMDBhN2RlNmMzN2QxOWExYTJhODdiZWEzOGQuLjVj
ZGNkYjJlNDMwYzhlNDk4NWRkOTQ0Y2Y3ZmZlMmM2ZTllM2MyYzMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3R1dG9yaWFsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvdHV0b3JpYWwuaHRtbApAQCAtMzEyLDEwICszMTIsMTAgQEAgZnVu
Y3Rpb24gb25QdXRUcmFuc2FjdGlvbkNvbXBsZXRlKCkKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9
IG9uR2V0U3VjY2VzczsKICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3I7CiAK
LSAgICAvLyBOb3RlIHRoYXQgbXVsdGlwbGUgb2JqZWN0U3RvcmUgKG9yIGluZGV4KSBtZXRob2Qg
Y2FsbHMgd2lsbCByZXR1cm4gZGlmZmVyZW50IG9iamVjdHMgKHRoYXQgc3RpbGwKLSAgICAvLyBy
ZWZlciB0byB0aGUgc2FtZSBvYmplY3RTdG9yZS9pbmRleCBvbiBkaXNrKS4KLSAgICBwZW9wbGUu
c29tZVByb3BlcnR5ID0gdHJ1ZTsKLSAgICBpZiAoY3VycmVudFRyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCJwZW9wbGUiKS5zb21lUHJvcGVydHkpCisgICAgLy8gTm90ZSB0aGF0IG11bHRpcGxlIG9i
amVjdFN0b3JlIChvciBpbmRleCkgbWV0aG9kIGNhbGxzIHdpbGwgcmV0dXJuIHRoZSBzYW1lIG9i
amVjdCwgd2l0aGluCisgICAgLy8gYSB0cmFuc2FjdGlvbjoKKyAgICBwZW9wbGUuc29tZVByb3Bl
cnR5ID0gInh5eiI7CisgICAgaWYgKGN1cnJlbnRUcmFuc2FjdGlvbi5vYmplY3RTdG9yZSgicGVv
cGxlIikuc29tZVByb3BlcnR5ICE9ICJ4eXoiKQogICAgICAgICBsb2dFcnJvcigiU29tZXRoaW5n
IHdlbnQgd3JvbmcuIik7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>