<?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>51818</bug_id>
          
          <creation_ts>2011-01-03 06:02:07 -0800</creation_ts>
          <short_desc>GeolocationPositionCache should not use ScriptExecutionContext::Task</short_desc>
          <delta_ts>2011-07-29 06:11:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          <dependson>51857</dependson>
          <blocked>51814</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Steve Block">steveblock</assigned_to>
          <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>328544</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 06:02:07 -0800</bug_when>
    <thetext>GeolocationPositionCache uses ScriptExecutionContext::Task to coordinate its background thread. GeolocationPositionCache  has nothing to do with ScriptExecutionContext so should not use this class. Instead it should use some other generic task infrastructure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328551</commentid>
    <comment_count>1</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 06:23:42 -0800</bug_when>
    <thetext>The convenience of using ScriptExecutionTask::Task is that CrossThreadTask provides generic machinery to create a ScriptExecutionContext::Task which simply invokes a supplied method. This machinery is heavily templated and modifying it to support tasks both with and without a ScriptExecutionContext would be messy.

The classes that currently use tasks with MessageQueue and which do not use a ScriptExecutionContext are as follows ...
FileThread
LocalStorageThread
DatabaseThread

Each of these uses a custom task class which could not be replaced by a simple generic task similar to CrossThreadTask. So the only user of such a generic task would be GeolocationPositionCache. I don&apos;t think it&apos;s worth adding the complexity of this generic machinery for a single user, though this can be revisited in the future.

So I think the correct approach is to add a custom task class for GeolocationPositionCache. We can also add a base class to provide a performTask() method for all of the existing task classes.

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328664</commentid>
    <comment_count>2</comment_count>
      <attachid>77826</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 11:13:43 -0800</bug_when>
    <thetext>Created attachment 77826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328675</commentid>
    <comment_count>3</comment_count>
      <attachid>77826</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-03 11:30:59 -0800</bug_when>
    <thetext>Comment on attachment 77826
Patch

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

It seems a little strange to make a function object and name it Task. But OK.

&gt; Source/JavaScriptCore/wtf/Task.h:40
&gt; +    virtual ~Task() {}

We put spaces between braces in cases like that.

&gt; WebCore/fileapi/FileThread.h:58
&gt; -    class Task : public Noncopyable {
&gt; +    class FileTask : public Task {

Does this really need to be renamed? You could just say this:

    class Task : public WTF::Task

That would make the patch smaller, but I guess could be a bit confusing. With the name FileTask it seems it could be made a non-member.

&gt; WebCore/page/GeolocationPositionCache.cpp:48
&gt; +    CacheTask(GeolocationPositionCache* cache) : m_cache(cache) {}

We put spaces in those {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328717</commentid>
    <comment_count>4</comment_count>
      <attachid>77826</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 12:51:00 -0800</bug_when>
    <thetext>Comment on attachment 77826
Patch

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

&gt;&gt; WebCore/fileapi/FileThread.h:58
&gt;&gt; +    class FileTask : public Task {
&gt; 
&gt; Does this really need to be renamed? You could just say this:
&gt; 
&gt;     class Task : public WTF::Task
&gt; 
&gt; That would make the patch smaller, but I guess could be a bit confusing. With the name FileTask it seems it could be made a non-member.

OK, I&apos;ll leave the name unchanged to minimise the size of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328718</commentid>
    <comment_count>5</comment_count>
      <attachid>77836</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 12:54:00 -0800</bug_when>
    <thetext>Created attachment 77836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328722</commentid>
    <comment_count>6</comment_count>
      <attachid>77836</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-01-03 13:00:37 -0800</bug_when>
    <thetext>Comment on attachment 77836
Patch

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

&gt; WebCore/page/GeolocationPositionCache.cpp:49
&gt; +    CacheTask(GeolocationPositionCache* cache) : m_cache(cache) { }
&gt; +    GeolocationPositionCache* m_cache;

It would be more elegant for m_cache to be private and have a protected accessor function cache().

&gt; WebCore/page/GeolocationPositionCache.cpp:56
&gt; +    CacheReadTask(GeolocationPositionCache* cache) : CacheTask(cache) {}

In my previous review, I didn’t call out every case of {} that should be changed to { }. This was another.

&gt; WebCore/page/GeolocationPositionCache.cpp:64
&gt; +    CacheWriteTask(GeolocationPositionCache* cache) : CacheTask(cache) {}

In my previous review, I didn’t call out every case of {} that should be changed to { }. This was another.

&gt; WebCore/storage/LocalStorageTask.cpp:-56
&gt; -LocalStorageTask::~LocalStorageTask()
&gt; -{
&gt; -}

This may be a controversial change. In the past I have removed these from DOM classes and then others added them back.

&gt; WebCore/storage/LocalStorageTask.h:-44
&gt; -        ~LocalStorageTask();

This may be a controversial change. In the past I have removed these from DOM classes and then others added them back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328757</commentid>
    <comment_count>7</comment_count>
      <attachid>77836</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 13:37:02 -0800</bug_when>
    <thetext>Comment on attachment 77836
Patch

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

&gt;&gt; WebCore/storage/LocalStorageTask.h:-44
&gt;&gt; -        ~LocalStorageTask();
&gt; 
&gt; This may be a controversial change. In the past I have removed these from DOM classes and then others added them back.

OK, I&apos;ll leave these in. Will upload another version so that levin, who suggested the change, can see the final version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328767</commentid>
    <comment_count>8</comment_count>
      <attachid>77844</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 13:50:31 -0800</bug_when>
    <thetext>Created attachment 77844
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328773</commentid>
    <comment_count>9</comment_count>
      <attachid>77844</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-03 14:00:28 -0800</bug_when>
    <thetext>Comment on attachment 77844
Patch

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

&gt; WebCore/page/GeolocationPositionCache.cpp:46
&gt; +class CacheTask : public Task {

I don&apos;t think you need this stuff.

Instead FileThreadTask.h should only rely on Task now and could be moved to wtf with Task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328777</commentid>
    <comment_count>10</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-03 14:06:15 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; The convenience of using ScriptExecutionTask::Task is that CrossThreadTask provides generic machinery to create a ScriptExecutionContext::Task which simply invokes a supplied method. This machinery is heavily templated and modifying it to support tasks both with and without a ScriptExecutionContext would be messy.
&gt; 
&gt; The classes that currently use tasks with MessageQueue and which do not use a ScriptExecutionContext are as follows ...
&gt; FileThread
&gt; LocalStorageThread
&gt; DatabaseThread
&gt; 
&gt; Each of these uses a custom task class which could not be replaced by a simple generic task similar to CrossThreadTask. So the only user of such a generic task would be GeolocationPositionCache. I don&apos;t think it&apos;s worth adding the complexity of this generic machinery for a single user, though this can be revisited in the future.

If you are considering this larger thing, it would be worthwhile to talk to Kinuko first (who has been thinking about this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328791</commentid>
    <comment_count>11</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 14:29:07 -0800</bug_when>
    <thetext>
&gt; Instead FileThreadTask.h should only rely on Task now and could be moved to
&gt; wtf with Task.
OK, but this will require moving CrossThreadCopier and CrossThreadTaskTraits to WTF too.

If FileThreadTask is to become a generic utility, any preference on naming? SimpleTask? CallbackTask?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328822</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-03 16:10:34 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Instead FileThreadTask.h should only rely on Task now and could be moved to
&gt; &gt; wtf with Task.
&gt; OK, but this will require moving CrossThreadCopier and CrossThreadTaskTraits to WTF too.
&gt; 
&gt; If FileThreadTask is to become a generic utility, any preference on naming? SimpleTask? CallbackTask?

On second hand, I don&apos;t think that works because it is creating a FileTask. Sorry :(

At this point, I don&apos;t understand why this patch is creating a wtf task because it doesn&apos;t seem to benefit the patch at all. (I wouldn&apos;t do this just because it seems like there are these common methods unless there is something more.)

I do think that getting rid of the ScriptExecutingContext::Task from here is good simply because it is really hackish to use it in this way. I will admit that you wished to leave it as is for now that could last for a bit longer as I believe a general clean up of this stuff will be in progress soon and it can take on this case too.)

Thanks for working on this. Sorry that it is a pain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328827</commentid>
    <comment_count>13</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-01-03 16:20:41 -0800</bug_when>
    <thetext>&gt; On second hand, I don&apos;t think that works because it is creating a FileTask.
There&apos;s nothing specific to files in FileTask, so I think this would work.

&gt; I do think that getting rid of the ScriptExecutingContext::Task from here is
&gt; good simply because it is really hackish to use it in this way. I will admit
&gt; that you wished to leave it as is for now that could last for a bit longer as
&gt; I believe a general clean up of this stuff will be in progress soon and it
&gt; can take on this case too.)
OK, I&apos;m happy to postpone the cleanup if you are. Do you have a bug I can point to for this more general cleanup?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>328855</commentid>
    <comment_count>14</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-03 17:51:15 -0800</bug_when>
    <thetext>I created a bug and made this dependent on it.

I hope that 51814 isn&apos;t blocked anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443913</commentid>
    <comment_count>15</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-07-29 06:11:08 -0700</bug_when>
    <thetext>GeolocationPositionCache was removed in Bug 65289</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77826</attachid>
            <date>2011-01-03 11:13:43 -0800</date>
            <delta_ts>2011-01-03 12:53:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51818-20110103191340.patch</filename>
            <type>text/plain</type>
            <size>23304</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTEtMDEtMDMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSBzaG91bGQgbm90IHVzZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTgxOAorCisg
ICAgICAgIEFkZHMgYSBuZXcgVGFzayBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Rhc2suaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlRhc2s6On5UYXNrKToKKwogMjAxMS0wMS0wMiAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFNp
bW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDc0ODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdFeHRyYXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9TdHJpbmdIYXNoZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENQYWNrZWRDYWNoZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1RDUGFnZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1RDU3BpbkxvY2suaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQkocmV2aXNpb24gNzQ4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw5IEBACiAgICAg
ICAgICAgICAnd3RmL1Bhc3NSZWZQdHIuaCcsCiAgICAgICAgICAgICAnd3RmL1BsYXRmb3JtLmgn
LAogICAgICAgICAgICAgJ3d0Zi9QdHJBbmRGbGFncy5oJywKKyAgICAgICAgICAgICd3dGYvcXQv
TWFpblRocmVhZFF0LmNwcCcsCisgICAgICAgICAgICAnd3RmL3F0L1N0cmluZ1F0LmNwcCcsCisg
ICAgICAgICAgICAnd3RmL3F0L1RocmVhZGluZ1F0LmNwcCcsCiAgICAgICAgICAgICAnd3RmL1Jh
bmRvbU51bWJlci5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9SYW5kb21OdW1iZXIuaCcsCiAgICAg
ICAgICAgICAnd3RmL1JhbmRvbU51bWJlclNlZWQuaCcsCkBAIC00MzIsMTAgKzQzNSw4IEBACiAg
ICAgICAgICAgICAnd3RmL1N0ZExpYkV4dHJhcy5oJywKICAgICAgICAgICAgICd3dGYvU3RyaW5n
RXh0cmFzLmgnLAogICAgICAgICAgICAgJ3d0Zi9TdHJpbmdIYXNoZXIuaCcsCisgICAgICAgICAg
ICAnd3RmL1Rhc2suaCcsCiAgICAgICAgICAgICAnd3RmL1RDUGFja2VkQ2FjaGUuaCcsCi0gICAg
ICAgICAgICAnd3RmL3F0L01haW5UaHJlYWRRdC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9xdC9T
dHJpbmdRdC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAnLAogICAg
ICAgICAgICAgJ3d0Zi9UQ1BhZ2VNYXAuaCcsCiAgICAgICAgICAgICAnd3RmL1RDU3BpbkxvY2su
aCcsCiAgICAgICAgICAgICAnd3RmL1RDU3lzdGVtQWxsb2MuY3BwJywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NDg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xODksNiArMTg5LDcgQEAKIAkJNDRERDQ4NTMwRkFFQTg1MDAwRDZCNEVCIC8qIFBh
c3NPd25QdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTExRkM0QzkxMTdFRTI4NzAwNDI1
MjcyIC8qIE1ENS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTFGQzRDNzExN0VFMjNEMDA0MjUyNzIgLyogTUQ1LmNwcCAqLzsgfTsKIAkJNTExRkM0
Q0IxMTdFRTJBODAwNDI1MjcyIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExRkM0Q0ExMTdFRTJBODAwNDI1MjcyIC8qIE1ENS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU5ODNCQ0U1MTJE
MjFEN0YwMDk2NjJENSAvKiBUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OUMzRDdBNDEyRDIxQjFDMDBCRTQxNjYgLyogVGFzay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVENTM3MjZGMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RDUzNzI2RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovOyB9
OwogCQk1RDVEOEFCNjBFMEQwQTcyMDBGOUM2OTIgLyoganNjIGluIENvcHkgSW50byBGcmFtZXdv
cmsgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRTEwODIyQTFDNzAw
NzM2OTc1IC8qIGpzYyAqLzsgfTsKIAkJNUQ1RDhBRDEwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVk
aXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAqLzsgfTsKQEAgLTc2
Myw2ICs3NjQsNyBAQAogCQk1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJv
YmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
NTFGNjQ4RDYwQkI0RTJDQTAwMzNENzYwIC8qIFJldGFpblB0ci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV0YWluUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU5QzNEN0E0MTJEMjFCMUMwMEJFNDE2NiAvKiBUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ1
MzcyNkQwRTFDNTQ2QjAwMjFFNTQ5IC8qIFRyYWNpbmcuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBUcmFjaW5nLmQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENTM3MjZFMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ1MzcyN0QwRTFDNTVF
QzAwMjFFNTQ5IC8qIFRyYWNpbmdEdHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHJhY2luZ0R0cmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ4
NSw2ICsxNDg3LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTlDM0Q3QTQxMkQyMUIx
QzAwQkU0MTY2IC8qIFRhc2suaCAqLywKIAkJCQk5M0FBNEY3NzA5NTcyNTFGMDA4NEIzQTcgLyog
QWx3YXlzSW5saW5lLmggKi8sCiAJCQkJOTM4QzRGNjkwQ0EwNkJDNzAwRDkzMTBBIC8qIEFTQ0lJ
Q1R5cGUuaCAqLywKIAkJCQk2NUUyMTdCODA4RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5j
cHAgKi8sCkBAIC0yMzc1LDYgKzIzNzgsNyBAQAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEy
MyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCM0VGMDUxMkJDMjRERDAw
RDI5RUZGIC8qIFBhZ2VCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGRkY5OEQxMkJGRkY3
NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTk4M0JDRTUxMkQyMUQ3RjAwOTY2MkQ1IC8qIFRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1Rhc2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRh
c2tfaAorI2RlZmluZSBUYXNrX2gKKworI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCitjbGFzcyBUYXNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5UYXNrKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKSA9
IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpUYXNrOworCisjZW5k
aWYgLy8gVGFza19oCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5MDcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDExLTAxLTAzICBTdGV2ZSBCbG9jayAgPHN0
ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUgc2hvdWxkIG5vdCB1c2UgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NTE4MTgKKworICAgICAgICBBZGRzIGEgbmV3IFRhc2sgaW50ZXJm
YWNlIHRoYXQgaXMgdXNlZCBieSBleGlzdGluZyB1c2VycyBvZiB0YXNrcworICAgICAgICB3aXRo
IE1lc3NhZ2VRdWV1ZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIHJlZmFjdG9yaW5nIG9ubHku
CisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvVGFzay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVh
ZDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6U2FtZUluc3RhbmNlUHJlZGljYXRlOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVUaHJlYWQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVUaHJlYWQ6OkZpbGVUYXNrOjpGaWxlVGFzayk6CisgICAgICAgICogZmlsZWFw
aS9GaWxlVGhyZWFkVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVhZFRhc2swOjpG
aWxlVGhyZWFkVGFzazApOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVhZFRhc2sxOjpGaWxl
VGhyZWFkVGFzazEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVhZFRhc2syOjpGaWxlVGhy
ZWFkVGFzazIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVRocmVhZFRhc2szOjpGaWxlVGhyZWFk
VGFzazMpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRmlsZVRocmVhZFRhc2spOgorICAgICAg
ICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhY2hlVGFzazo6Q2FjaGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlUmVhZFRhc2s6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZVJlYWRUYXNrOjpDYWNoZVJlYWRUYXNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlUmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlV3JpdGVUYXNrOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVXcml0ZVRhc2s6OkNhY2hlV3JpdGVUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
V3JpdGVUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBv
c2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlclJlYWRGcm9tRGF0YWJhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbURhdGFiYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRl
VG9EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OndyaXRlVG9EYXRhYmFzZSk6CisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2Fj
aGUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGFzay5oOgorICAgICAgICAqIHN0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6CisgICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VU
YXNrLmg6CisKIDIwMTEtMDEtMDMgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBbUXRdIFVucmV2aWV3ZWQgYnVpbGRmaXggZm9yIC0tbWluaW1hbCBidWls
ZCBhZnRlciByNzQ4OTUuCkluZGV4OiBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9UYXNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvVGFzay5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvVGFzay5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfVGFza19oCisjZGVm
aW5lIFdlYkNvcmVfRldEX1Rhc2tfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Rhc2suaD4K
KyNlbmRpZgpJbmRleDogV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmNwcAkocmV2aXNpb24gNzQ4ODgpCisrKyBX
ZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0
LDcgQEAgdm9pZCBGaWxlVGhyZWFkOjpzdG9wKCkKICAgICBtX3F1ZXVlLmtpbGwoKTsKIH0KIAot
dm9pZCBGaWxlVGhyZWFkOjpwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+IHRhc2spCit2b2lkIEZp
bGVUaHJlYWQ6OnBvc3RUYXNrKFBhc3NPd25QdHI8RmlsZVRhc2s+IHRhc2spCiB7CiAgICAgbV9x
dWV1ZS5hcHBlbmQodGFzayk7CiB9CkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgRmlsZVRocmVhZDo6
cG9zdFRhc2soUGFzc093blB0cjxUYXMKIGNsYXNzIFNhbWVJbnN0YW5jZVByZWRpY2F0ZSB7CiBw
dWJsaWM6CiAgICAgU2FtZUluc3RhbmNlUHJlZGljYXRlKGNvbnN0IHZvaWQqIGluc3RhbmNlKSA6
IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQotICAgIGJvb2wgb3BlcmF0b3IoKShGaWxlVGhyZWFk
OjpUYXNrKiB0YXNrKSBjb25zdCB7IHJldHVybiB0YXNrLT5pbnN0YW5jZSgpID09IG1faW5zdGFu
Y2U7IH0KKyAgICBib29sIG9wZXJhdG9yKCkoRmlsZVRocmVhZDo6RmlsZVRhc2sqIHRhc2spIGNv
bnN0IHsgcmV0dXJuIHRhc2stPmluc3RhbmNlKCkgPT0gbV9pbnN0YW5jZTsgfQogcHJpdmF0ZToK
ICAgICBjb25zdCB2b2lkKiBtX2luc3RhbmNlOwogfTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9G
aWxlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0ZpbGVUaHJlYWQuaAko
cmV2aXNpb24gNzQ4ODgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVGFzay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTQsMTcgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBib29sIHN0
YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBjbGFzcyBUYXNrIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKKyAgICBjbGFzcyBGaWxlVGFzayA6IHB1YmxpYyBUYXNrIHsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgflRhc2soKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZv
cm1UYXNrKCkgPSAwOwogICAgICAgICB2b2lkKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdGFuY2U7IH0KICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFRhc2sodm9pZCogaW5zdGFuY2Up
IDogbV9pbnN0YW5jZShpbnN0YW5jZSkgeyB9CisgICAgICAgIEZpbGVUYXNrKHZvaWQqIGluc3Rh
bmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQogICAgICAgICB2b2lkKiBtX2luc3RhbmNl
OwogICAgIH07CiAKLSAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4gdGFzayk7Cisg
ICAgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPEZpbGVUYXNrPik7CiAKICAgICB2b2lkIHVuc2No
ZWR1bGVUYXNrcyhjb25zdCB2b2lkKiBpbnN0YW5jZSk7CiAKQEAgLTc2LDcgKzc1LDcgQEAgcHJp
dmF0ZToKIAogICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJRDsKICAgICBSZWZQdHI8Rmls
ZVRocmVhZD4gbV9zZWxmUmVmOwotICAgIE1lc3NhZ2VRdWV1ZTxUYXNrPiBtX3F1ZXVlOworICAg
IE1lc3NhZ2VRdWV1ZTxGaWxlVGFzaz4gbV9xdWV1ZTsKIAogICAgIE11dGV4IG1fdGhyZWFkQ3Jl
YXRpb25NdXRleDsKIH07CkluZGV4OiBXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZFRhc2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZFRhc2suaAkocmV2aXNpb24g
NzQ4ODgpCisrKyBXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVhZFRhc2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotY2xhc3MgRmlsZVRocmVhZFRhc2swIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sg
eworY2xhc3MgRmlsZVRocmVhZFRhc2swIDogcHVibGljIEZpbGVUaHJlYWQ6OkZpbGVUYXNrIHsK
IHB1YmxpYzoKICAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKCk7CiAgICAgdHlwZWRlZiBG
aWxlVGhyZWFkVGFzazA8VD4gRmlsZVRocmVhZFRhc2tJbXBsOwpAQCAtNTIsNyArNTIsNyBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRmlsZVRocmVhZFRhc2swKFQqIGluc3RhbmNlLCBNZXRo
b2QgbWV0aG9kKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAg
IDogRmlsZVRocmVhZDo6RmlsZVRhc2soaW5zdGFuY2UpCiAgICAgICAgICwgbV9tZXRob2QobWV0
aG9kKQogICAgIHsKICAgICB9CkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgotY2xhc3MgRmlsZVRo
cmVhZFRhc2sxIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworY2xhc3MgRmlsZVRocmVhZFRh
c2sxIDogcHVibGljIEZpbGVUaHJlYWQ6OkZpbGVUYXNrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IHZvaWQgKFQ6OipNZXRob2QpKE1QMSk7CiAgICAgdHlwZWRlZiBGaWxlVGhyZWFkVGFzazE8VCwg
UDEsIE1QMT4gRmlsZVRocmVhZFRhc2tJbXBsOwpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgRmlsZVRocmVhZFRhc2sxKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSkKLSAgICAgICAgOiBGaWxlVGhyZWFkOjpUYXNrKGluc3RhbmNl
KQorICAgICAgICA6IEZpbGVUaHJlYWQ6OkZpbGVUYXNrKGluc3RhbmNlKQogICAgICAgICAsIG1f
bWV0aG9kKG1ldGhvZCkKICAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKICAgICB7
CkBAIC05Nyw3ICs5Nyw3IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgotY2xh
c3MgRmlsZVRocmVhZFRhc2syIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworY2xhc3MgRmls
ZVRocmVhZFRhc2syIDogcHVibGljIEZpbGVUaHJlYWQ6OkZpbGVUYXNrIHsKIHB1YmxpYzoKICAg
ICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyKTsKICAgICB0eXBlZGVmIEZpbGVU
aHJlYWRUYXNrMjxULCBQMSwgTVAxLCBQMiwgTVAyPiBGaWxlVGhyZWFkVGFza0ltcGw7CkBAIC0x
MTEsNyArMTExLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEZpbGVUaHJlYWRUYXNrMihU
KiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgIDog
RmlsZVRocmVhZDo6RmlsZVRhc2soaW5zdGFuY2UpCiAgICAgICAgICwgbV9tZXRob2QobWV0aG9k
KQogICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQogICAgICAgICAsIG1fcGFyYW1l
dGVyMihwYXJhbWV0ZXIyKQpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwg
dHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzPgotY2xhc3MgRmlsZVRocmVh
ZFRhc2szIDogcHVibGljIEZpbGVUaHJlYWQ6OlRhc2sgeworY2xhc3MgRmlsZVRocmVhZFRhc2sz
IDogcHVibGljIEZpbGVUaHJlYWQ6OkZpbGVUYXNrIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIHZv
aWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMpOwogICAgIHR5cGVkZWYgRmlsZVRocmVhZFRh
c2szPFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDM+IEZpbGVUaHJlYWRUYXNrSW1wbDsKQEAg
LTE0NSw3ICsxNDUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRmlsZVRocmVhZFRhc2sz
KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBh
cmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQotICAgICAgICA6IEZpbGVUaHJlYWQ6OlRhc2so
aW5zdGFuY2UpCisgICAgICAgIDogRmlsZVRocmVhZDo6RmlsZVRhc2soaW5zdGFuY2UpCiAgICAg
ICAgICwgbV9tZXRob2QobWV0aG9kKQogICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIx
KQogICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQpAQCAtMTY2LDEyICsxNjYsMTIg
QEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1QYXNzT3duUHRyPEZpbGVU
aHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorUGFzc093blB0cjxGaWxlVGhyZWFk
OjpGaWxlVGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVlLAog
ICAgIHZvaWQgKFQ6OiptZXRob2QpKCkpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotUGFzc093
blB0cjxGaWxlVGhyZWFkOjpUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKK1Bhc3NPd25QdHI8
RmlsZVRocmVhZDo6RmlsZVRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0
IGNhbGxlZSwKICAgICB2b2lkIChUOjoqbWV0aG9kKSgpKQogewpAQCAtMTgxLDcgKzE4MSw3IEBA
IFBhc3NPd25QdHI8RmlsZVRocmVhZDo6VGFzaz4gY3JlYXRlRmlsZVQKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KLVBhc3NPd25QdHI8RmlsZVRo
cmVhZDo6VGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCitQYXNzT3duUHRyPEZpbGVUaHJlYWQ6
OkZpbGVUYXNrPiBjcmVhdGVGaWxlVGhyZWFkVGFzaygKICAgICBUKiBjb25zdCBjYWxsZWUsCiAg
ICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxKSwKICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSkKQEAg
LTE5Myw3ICsxOTMsNyBAQCBQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVU
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+Ci1QYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNy
ZWF0ZUZpbGVUaHJlYWRUYXNrKAorUGFzc093blB0cjxGaWxlVGhyZWFkOjpGaWxlVGFzaz4gY3Jl
YXRlRmlsZVRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVlLAogICAgIHZvaWQgKFQ6Oipt
ZXRob2QpKE1QMSwgTVAyKSwKICAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKQEAgLTIwNyw3ICsy
MDcsNyBAQCBQYXNzT3duUHRyPEZpbGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAy
LCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+Ci1QYXNzT3duUHRyPEZp
bGVUaHJlYWQ6OlRhc2s+IGNyZWF0ZUZpbGVUaHJlYWRUYXNrKAorUGFzc093blB0cjxGaWxlVGhy
ZWFkOjpGaWxlVGFzaz4gY3JlYXRlRmlsZVRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVl
LAogICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMpLAogICAgIGNvbnN0IFAxJiBw
YXJhbWV0ZXIxLApJbmRleDogV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5j
cHAJKHJldmlzaW9uIDc0ODg4KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShH
RU9MT0NBVElPTikKIAotI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkdl
b3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRh
YmFzZS5oIgpAQCAtNDQsNiArNDMsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
aW50IG51bVVzZXJzID0gMDsKIAorY2xhc3MgQ2FjaGVUYXNrIDogcHVibGljIFRhc2sgeworcHJv
dGVjdGVkOgorICAgIENhY2hlVGFzayhHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIGNhY2hlKSA6
IG1fY2FjaGUoY2FjaGUpIHt9CisgICAgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBtX2NhY2hl
OworfTsKKworY2xhc3MgQ2FjaGVSZWFkVGFzayA6IHB1YmxpYyBDYWNoZVRhc2sgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlUmVhZFRhc2s+IGNyZWF0ZShHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGUqIGNhY2hlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVSZWFkVGFz
ayhjYWNoZSkpOyB9Citwcml2YXRlOgorICAgIENhY2hlUmVhZFRhc2soR2VvbG9jYXRpb25Qb3Np
dGlvbkNhY2hlKiBjYWNoZSkgOiBDYWNoZVRhc2soY2FjaGUpIHt9CisgICAgdm9pZCBwZXJmb3Jt
VGFzaygpIHsgbV9jYWNoZS0+cmVhZEZyb21EYXRhYmFzZSgpOyB9Cit9OworCitjbGFzcyBDYWNo
ZVdyaXRlVGFzayA6IHB1YmxpYyBDYWNoZVRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
T3duUHRyPENhY2hlV3JpdGVUYXNrPiBjcmVhdGUoR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBj
YWNoZSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlV3JpdGVUYXNrKGNhY2hlKSk7IH0KK3By
aXZhdGU6CisgICAgQ2FjaGVXcml0ZVRhc2soR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNo
ZSkgOiBDYWNoZVRhc2soY2FjaGUpIHt9CisgICAgdm9pZCBwZXJmb3JtVGFzaygpIHsgbV9jYWNo
ZS0+d3JpdGVUb0RhdGFiYXNlKCk7IH0KK307CisKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSog
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjppbnN0YW5jZSgpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqLCBpbnN0YW5jZSwgKDApKTsKQEAgLTEy
MCwyMyArMTQxLDE2IEBAIHZvaWQqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhyZWFkRW4K
IAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnRJbXBsKCkK
IHsKLSAgICB3aGlsZSAoT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sg
PSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBh
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaW4gdGhlIGNhbGxiYWNrLCBzbyBwYXNzIDAgaGVyZS4K
LSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soMCk7Ci0gICAgfQorICAgIHdoaWxlIChPd25QdHI8
VGFzaz4gdGFzayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkKKyAgICAgICAgdGFzay0+cGVy
Zm9ybVRhc2soKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJS
ZWFkRnJvbURhdGFiYXNlKCkKIHsKLSAgICBtX3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxsYmFja1Rh
c2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSwgdGhpcykpOwot
fQotCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKLXsK
LSAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKKyAgICBtX3F1ZXVlLmFwcGVuZChD
YWNoZVJlYWRUYXNrOjpjcmVhdGUodGhpcykpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZUltcGwoKQordm9pZCBHZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGU6OnJlYWRGcm9tRGF0YWJhc2UoKQogewogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNl
OwogICAgIHsKQEAgLTE4NywxNSArMjAxLDEwIEBAIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlOjpyZWFkRnJvbUQKIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJX
cml0ZVRvRGF0YWJhc2UoKQogewotICAgIG1fcXVldWUuYXBwZW5kKGNyZWF0ZUNhbGxiYWNrVGFz
ayh3cml0ZVRvRGF0YWJhc2UsIHRoaXMpKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9u
Q2FjaGU6OndyaXRlVG9EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKLXsKLSAgICBjYWNoZS0+d3JpdGVUb0RhdGFiYXNlSW1w
bCgpOworICAgIG1fcXVldWUuYXBwZW5kKENhY2hlV3JpdGVUYXNrOjpjcmVhdGUodGhpcykpOwog
fQogCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlSW1wbCgp
Cit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlKCkKIHsKICAg
ICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKICAgICB7CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xv
Y2F0aW9uUG9zaXRpb25DYWNoZS5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvcGFnZS9H
ZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTUgKzI3LDE2
IEBACiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZV9oCiAKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UYXNrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2FjaGVSZWFk
VGFzazsKK2NsYXNzIENhY2hlV3JpdGVUYXNrOwogY2xhc3MgR2VvcG9zaXRpb247CiAKIC8vIE1h
aW50YWlucyBhIGNhY2hlZCBwb3NpdGlvbiBmb3IgR2VvbG9jYXRpb24uIFRha2VzIGNhcmUgb2Yg
d3JpdGluZyBhbmQKQEAgLTQzLDYgKzQ0LDggQEAgY2xhc3MgR2VvcG9zaXRpb247CiAvLyBzcGVj
IGRvZXMgbm90IHJlcXVpcmUgYSBjYWNoZWQgcG9zaXRpb24gdG8gYmUgbWFpbnRhaW5lZCwgc28g
d2UgdGFrZSBhCiAvLyBiZXN0LWVmZm9ydCBhcHByb2FjaCB3aGVyZSB3ZSBkbyBub3Qgd2FpdCBm
b3IgZGF0YWJhc2UgcmVhZHMgb3Igd3JpdGVzLgogY2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNh
Y2hlIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVSZWFkVGFzazsKKyAgICBmcmllbmQgY2xhc3Mg
Q2FjaGVXcml0ZVRhc2s7CiBwdWJsaWM6CiAgICAgc3RhdGljIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZSogaW5zdGFuY2UoKTsKIApAQCAtNjEsMTYgKzY0LDE0IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCB0aHJlYWRFbnRyeVBvaW50SW1wbCgpOwogCiAgICAgdm9pZCB0cmlnZ2VyUmVhZEZyb21EYXRh
YmFzZSgpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOwotICAgIHZvaWQgcmVhZEZyb21E
YXRhYmFzZUltcGwoKTsKKyAgICB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoKTsKICAgICB2b2lkIHRy
aWdnZXJXcml0ZVRvRGF0YWJhc2UoKTsKLSAgICBzdGF0aWMgdm9pZCB3cml0ZVRvRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOwotICAg
IHZvaWQgd3JpdGVUb0RhdGFiYXNlSW1wbCgpOworICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNlKCk7
CiAKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fY2FjaGVkUG9zaXRpb247CiAgICAgTXV0ZXgg
bV9jYWNoZWRQb3NpdGlvbk11dGV4OwogICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJZDsK
LSAgICBNZXNzYWdlUXVldWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV9xdWV1ZTsK
KyAgICBNZXNzYWdlUXVldWU8VGFzaz4gbV9xdWV1ZTsKICAgICBTdHJpbmcgbV9kYXRhYmFzZUZp
bGU7CiAgICAgTXV0ZXggbV9kYXRhYmFzZUZpbGVNdXRleDsKIH07CkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGFzay5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRh
c2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Rhc2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02NywxMSArNjgsMTEgQEAgcHJpdmF0ZToK
ICNlbmRpZgogfTsKIAotY2xhc3MgRGF0YWJhc2VUYXNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsK
K2NsYXNzIERhdGFiYXNlVGFzayA6IHB1YmxpYyBUYXNrIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5EYXRhYmFzZVRhc2soKTsKIAotICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGVyZm9ybVRhc2soKTsKIAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YWJhc2U7IH0KICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9M
b2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDYgQEAgTG9j
YWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhUeXBlIAogICAgIEFTU0VSVChtX3R5cGUg
PT0gVGVybWluYXRlVGhyZWFkKTsKIH0KIAotTG9jYWxTdG9yYWdlVGFzazo6fkxvY2FsU3RvcmFn
ZVRhc2soKQotewotfQotCiB2b2lkIExvY2FsU3RvcmFnZVRhc2s6OnBlcmZvcm1UYXNrKCkKIHsK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFn
ZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5o
CShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0Up
CiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UYXNrLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywx
OCArMzgsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIExvY2FsU3RvcmFnZVRo
cmVhZDsKIAogICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhpcyBjbGFzcyB0byBTdG9yYWdlVGFzawot
ICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgTm9uY29weWFibGUgeworICAgIGNs
YXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgVGFzayB7CiAgICAgcHVibGljOgogICAgICAg
ICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRlRW1wdHlEYXRhYmFzZSwg
VGVybWluYXRlVGhyZWFkIH07CiAKLSAgICAgICAgfkxvY2FsU3RvcmFnZVRhc2soKTsKLQogICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVJbXBvcnQoU3Rv
cmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9wdFB0cihuZXcgTG9jYWxTdG9yYWdlVGFz
ayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxT
dG9yYWdlVGFzaz4gY3JlYXRlU3luYyhTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFk
b3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFTeW5jLCBhcmVhKSk7IH0KICAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlRGVsZXRlRW1wdHlEYXRh
YmFzZShTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0
b3JhZ2VUYXNrKERlbGV0ZUVtcHR5RGF0YWJhc2UsIGFyZWEpKTsgfQogICAgICAgICBzdGF0aWMg
UGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVhdGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdl
VGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRl
cm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KIAotICAgICAgICB2b2lkIHBlcmZvcm1UYXNrKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBTdG9yYWdlQXJlYVN5bmMqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77836</attachid>
            <date>2011-01-03 12:54:00 -0800</date>
            <delta_ts>2011-01-03 13:50:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51818-20110103205357.patch</filename>
            <type>text/plain</type>
            <size>17799</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTEtMDEtMDMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSBzaG91bGQgbm90IHVzZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTgxOAorCisg
ICAgICAgIEFkZHMgYSBuZXcgVGFzayBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Rhc2suaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlRhc2s6On5UYXNrKToKKwogMjAxMS0wMS0wMiAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFNp
bW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDc0ODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdFeHRyYXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9TdHJpbmdIYXNoZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENQYWNrZWRDYWNoZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1RDUGFnZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1RDU3BpbkxvY2suaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQkocmV2aXNpb24gNzQ4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw5IEBACiAgICAg
ICAgICAgICAnd3RmL1Bhc3NSZWZQdHIuaCcsCiAgICAgICAgICAgICAnd3RmL1BsYXRmb3JtLmgn
LAogICAgICAgICAgICAgJ3d0Zi9QdHJBbmRGbGFncy5oJywKKyAgICAgICAgICAgICd3dGYvcXQv
TWFpblRocmVhZFF0LmNwcCcsCisgICAgICAgICAgICAnd3RmL3F0L1N0cmluZ1F0LmNwcCcsCisg
ICAgICAgICAgICAnd3RmL3F0L1RocmVhZGluZ1F0LmNwcCcsCiAgICAgICAgICAgICAnd3RmL1Jh
bmRvbU51bWJlci5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9SYW5kb21OdW1iZXIuaCcsCiAgICAg
ICAgICAgICAnd3RmL1JhbmRvbU51bWJlclNlZWQuaCcsCkBAIC00MzIsMTAgKzQzNSw4IEBACiAg
ICAgICAgICAgICAnd3RmL1N0ZExpYkV4dHJhcy5oJywKICAgICAgICAgICAgICd3dGYvU3RyaW5n
RXh0cmFzLmgnLAogICAgICAgICAgICAgJ3d0Zi9TdHJpbmdIYXNoZXIuaCcsCisgICAgICAgICAg
ICAnd3RmL1Rhc2suaCcsCiAgICAgICAgICAgICAnd3RmL1RDUGFja2VkQ2FjaGUuaCcsCi0gICAg
ICAgICAgICAnd3RmL3F0L01haW5UaHJlYWRRdC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9xdC9T
dHJpbmdRdC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAnLAogICAg
ICAgICAgICAgJ3d0Zi9UQ1BhZ2VNYXAuaCcsCiAgICAgICAgICAgICAnd3RmL1RDU3BpbkxvY2su
aCcsCiAgICAgICAgICAgICAnd3RmL1RDU3lzdGVtQWxsb2MuY3BwJywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NDg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xODksNiArMTg5LDcgQEAKIAkJNDRERDQ4NTMwRkFFQTg1MDAwRDZCNEVCIC8qIFBh
c3NPd25QdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTExRkM0QzkxMTdFRTI4NzAwNDI1
MjcyIC8qIE1ENS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTFGQzRDNzExN0VFMjNEMDA0MjUyNzIgLyogTUQ1LmNwcCAqLzsgfTsKIAkJNTExRkM0
Q0IxMTdFRTJBODAwNDI1MjcyIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExRkM0Q0ExMTdFRTJBODAwNDI1MjcyIC8qIE1ENS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU5ODNCQ0U1MTJE
MjFEN0YwMDk2NjJENSAvKiBUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OUMzRDdBNDEyRDIxQjFDMDBCRTQxNjYgLyogVGFzay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVENTM3MjZGMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RDUzNzI2RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovOyB9
OwogCQk1RDVEOEFCNjBFMEQwQTcyMDBGOUM2OTIgLyoganNjIGluIENvcHkgSW50byBGcmFtZXdv
cmsgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRTEwODIyQTFDNzAw
NzM2OTc1IC8qIGpzYyAqLzsgfTsKIAkJNUQ1RDhBRDEwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVk
aXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAqLzsgfTsKQEAgLTc2
Myw2ICs3NjQsNyBAQAogCQk1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJv
YmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
NTFGNjQ4RDYwQkI0RTJDQTAwMzNENzYwIC8qIFJldGFpblB0ci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV0YWluUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU5QzNEN0E0MTJEMjFCMUMwMEJFNDE2NiAvKiBUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ1
MzcyNkQwRTFDNTQ2QjAwMjFFNTQ5IC8qIFRyYWNpbmcuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBUcmFjaW5nLmQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENTM3MjZFMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ1MzcyN0QwRTFDNTVF
QzAwMjFFNTQ5IC8qIFRyYWNpbmdEdHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHJhY2luZ0R0cmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ4
NSw2ICsxNDg3LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTlDM0Q3QTQxMkQyMUIx
QzAwQkU0MTY2IC8qIFRhc2suaCAqLywKIAkJCQk5M0FBNEY3NzA5NTcyNTFGMDA4NEIzQTcgLyog
QWx3YXlzSW5saW5lLmggKi8sCiAJCQkJOTM4QzRGNjkwQ0EwNkJDNzAwRDkzMTBBIC8qIEFTQ0lJ
Q1R5cGUuaCAqLywKIAkJCQk2NUUyMTdCODA4RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5j
cHAgKi8sCkBAIC0yMzc1LDYgKzIzNzgsNyBAQAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEy
MyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCM0VGMDUxMkJDMjRERDAw
RDI5RUZGIC8qIFBhZ2VCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGRkY5OEQxMkJGRkY3
NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTk4M0JDRTUxMkQyMUQ3RjAwOTY2MkQ1IC8qIFRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1Rhc2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRh
c2tfaAorI2RlZmluZSBUYXNrX2gKKworI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCitjbGFzcyBUYXNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGFzazsKKworI2Vu
ZGlmIC8vIFRhc2tfaApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTA3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwzNiBAQAorMjAxMS0wMS0wMyAgU3RldmUgQmxvY2sgIDxz
dGV2ZWJsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHNob3VsZCBub3QgdXNlIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUxODE4CisKKyAgICAgICAgQWRkcyBhIG5ldyBUYXNrIGludGVy
ZmFjZSB0aGF0IGlzIHVzZWQgYnkgZXhpc3RpbmcgdXNlcnMgb2YgdGFza3MKKyAgICAgICAgd2l0
aCBNZXNzYWdlUXVldWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZyBvbmx5
LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1Rhc2suaDogQWRkZWQuCisgICAg
ICAgICogZmlsZWFwaS9GaWxlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlVGhyZWFk
OjpGaWxlVGFzazo6RmlsZVRhc2spOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlVGFzazo6Q2FjaGVUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlUmVhZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZVJlYWRUYXNrOjpDYWNoZVJlYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
UmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlV3JpdGVUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVXcml0ZVRhc2s6OkNhY2hlV3JpdGVU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlV3JpdGVUYXNrOjpwZXJmb3JtVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9p
bnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJp
Z2dlclJlYWRGcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3Np
dGlvbkNhY2hlOjpyZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSk6CisgICAgICAg
ICogcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlVGFzay5oOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHA6Cisg
ICAgICAgICogc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmg6CisKIDIwMTEtMDEtMDMgIENzYWJh
IE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIFVucmV2aWV3
ZWQgYnVpbGRmaXggZm9yIC0tbWluaW1hbCBidWlsZCBhZnRlciByNzQ4OTUuCkluZGV4OiBXZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9UYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvVGFzay5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvVGFzay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQgQEAKKyNp
Zm5kZWYgV2ViQ29yZV9GV0RfVGFza19oCisjZGVmaW5lIFdlYkNvcmVfRldEX1Rhc2tfaAorI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Rhc2suaD4KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9maWxl
YXBpL0ZpbGVUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2ZpbGVhcGkvRmlsZVRocmVh
ZC5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDx3dGYvTWVzc2FnZVF1ZXVl
Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCwxNyArNTUsMTUgQEAgcHVibGljOgogICAgIGJv
b2wgc3RhcnQoKTsKICAgICB2b2lkIHN0b3AoKTsKIAotICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworICAgIGNsYXNzIFRhc2sgOiBwdWJsaWMgV1RGOjpUYXNrIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgflRhc2soKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKCkgPSAwOwogICAgICAgICB2b2lkKiBpbnN0YW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdGFuY2U7IH0KICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFRhc2sodm9pZCogaW5z
dGFuY2UpIDogbV9pbnN0YW5jZShpbnN0YW5jZSkgeyB9CiAgICAgICAgIHZvaWQqIG1faW5zdGFu
Y2U7CiAgICAgfTsKIAotICAgIHZvaWQgcG9zdFRhc2soUGFzc093blB0cjxUYXNrPiB0YXNrKTsK
KyAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25QdHI8VGFzaz4pOwogCiAgICAgdm9pZCB1bnNjaGVk
dWxlVGFza3MoY29uc3Qgdm9pZCogaW5zdGFuY2UpOwogCkluZGV4OiBXZWJDb3JlL3BhZ2UvR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gNzQ4ODgpCisrKyBXZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNiBAQAogCiAjaWYgRU5BQkxFKEdFT0xPQ0FUSU9OKQogCi0jaW5jbHVkZSAiQ3Jvc3NUaHJl
YWRUYXNrLmgiCiAjaW5jbHVkZSAiR2VvcG9zaXRpb24uaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5o
IgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCkBAIC00NCw2ICs0MywyOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbnQgbnVtVXNlcnMgPSAwOwogCitjbGFzcyBDYWNoZVRh
c2sgOiBwdWJsaWMgVGFzayB7Citwcm90ZWN0ZWQ6CisgICAgQ2FjaGVUYXNrKEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZSogY2FjaGUpIDogbV9jYWNoZShjYWNoZSkgeyB9CisgICAgR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlKiBtX2NhY2hlOworfTsKKworY2xhc3MgQ2FjaGVSZWFkVGFzayA6IHB1
YmxpYyBDYWNoZVRhc2sgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlUmVh
ZFRhc2s+IGNyZWF0ZShHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIGNhY2hlKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgQ2FjaGVSZWFkVGFzayhjYWNoZSkpOyB9Citwcml2YXRlOgorICAgIENhY2hl
UmVhZFRhc2soR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkgOiBDYWNoZVRhc2soY2Fj
aGUpIHt9CisgICAgdm9pZCBwZXJmb3JtVGFzaygpIHsgbV9jYWNoZS0+cmVhZEZyb21EYXRhYmFz
ZSgpOyB9Cit9OworCitjbGFzcyBDYWNoZVdyaXRlVGFzayA6IHB1YmxpYyBDYWNoZVRhc2sgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENhY2hlV3JpdGVUYXNrPiBjcmVhdGUoR2Vv
bG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hl
V3JpdGVUYXNrKGNhY2hlKSk7IH0KK3ByaXZhdGU6CisgICAgQ2FjaGVXcml0ZVRhc2soR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkgOiBDYWNoZVRhc2soY2FjaGUpIHt9CisgICAgdm9p
ZCBwZXJmb3JtVGFzaygpIHsgbV9jYWNoZS0+d3JpdGVUb0RhdGFiYXNlKCk7IH0KK307CisKIEdl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZSogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjppbnN0YW5j
ZSgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUq
LCBpbnN0YW5jZSwgKDApKTsKQEAgLTEyMCwyMyArMTQxLDE2IEBAIHZvaWQqIEdlb2xvY2F0aW9u
UG9zaXRpb25DYWNoZTo6dGhyZWFkRW4KIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6
OnRocmVhZEVudHJ5UG9pbnRJbXBsKCkKIHsKLSAgICB3aGlsZSAoT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAg
ICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaW4gdGhlIGNh
bGxiYWNrLCBzbyBwYXNzIDAgaGVyZS4KLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soMCk7Ci0g
ICAgfQorICAgIHdoaWxlIChPd25QdHI8VGFzaz4gdGFzayA9IG1fcXVldWUud2FpdEZvck1lc3Nh
Z2UoKSkKKyAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJSZWFkRnJvbURhdGFiYXNlKCkKIHsKLSAgICBtX3F1ZXVl
LmFwcGVuZChjcmVhdGVDYWxsYmFja1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVh
ZEZyb21EYXRhYmFzZSwgdGhpcykpOwotfQotCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6cmVhZEZyb21EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Q
b3NpdGlvbkNhY2hlKiBjYWNoZSkKLXsKLSAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwo
KTsKKyAgICBtX3F1ZXVlLmFwcGVuZChDYWNoZVJlYWRUYXNrOjpjcmVhdGUodGhpcykpOwogfQog
Ci12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZUltcGwoKQor
dm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2UoKQogewogICAg
IFNRTGl0ZURhdGFiYXNlIGRhdGFiYXNlOwogICAgIHsKQEAgLTE4NywxNSArMjAxLDEwIEBAIHZv
aWQgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjpyZWFkRnJvbUQKIAogdm9pZCBHZW9sb2NhdGlv
blBvc2l0aW9uQ2FjaGU6OnRyaWdnZXJXcml0ZVRvRGF0YWJhc2UoKQogewotICAgIG1fcXVldWUu
YXBwZW5kKGNyZWF0ZUNhbGxiYWNrVGFzayh3cml0ZVRvRGF0YWJhc2UsIHRoaXMpKTsKLX0KLQot
dm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKLXsKLSAgICBj
YWNoZS0+d3JpdGVUb0RhdGFiYXNlSW1wbCgpOworICAgIG1fcXVldWUuYXBwZW5kKENhY2hlV3Jp
dGVUYXNrOjpjcmVhdGUodGhpcykpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZTo6d3JpdGVUb0RhdGFiYXNlSW1wbCgpCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6
d3JpdGVUb0RhdGFiYXNlKCkKIHsKICAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKICAgICB7
CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCShyZXZpc2lvbiA3
NDg4OCkKKysrIFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsMTUgKzI3LDE2IEBACiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRpb25D
YWNoZV9oCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8
d3RmL01lc3NhZ2VRdWV1ZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UYXNrLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgQ2FjaGVSZWFkVGFzazsKK2NsYXNzIENhY2hlV3JpdGVUYXNrOwogY2xh
c3MgR2VvcG9zaXRpb247CiAKIC8vIE1haW50YWlucyBhIGNhY2hlZCBwb3NpdGlvbiBmb3IgR2Vv
bG9jYXRpb24uIFRha2VzIGNhcmUgb2Ygd3JpdGluZyBhbmQKQEAgLTQzLDYgKzQ0LDggQEAgY2xh
c3MgR2VvcG9zaXRpb247CiAvLyBzcGVjIGRvZXMgbm90IHJlcXVpcmUgYSBjYWNoZWQgcG9zaXRp
b24gdG8gYmUgbWFpbnRhaW5lZCwgc28gd2UgdGFrZSBhCiAvLyBiZXN0LWVmZm9ydCBhcHByb2Fj
aCB3aGVyZSB3ZSBkbyBub3Qgd2FpdCBmb3IgZGF0YWJhc2UgcmVhZHMgb3Igd3JpdGVzLgogY2xh
c3MgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVSZWFk
VGFzazsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVXcml0ZVRhc2s7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSogaW5zdGFuY2UoKTsKIApAQCAtNjEsMTYgKzY0
LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0aHJlYWRFbnRyeVBvaW50SW1wbCgpOwogCiAgICAg
dm9pZCB0cmlnZ2VyUmVhZEZyb21EYXRhYmFzZSgpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRGcm9t
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZSopOwotICAgIHZvaWQgcmVhZEZyb21EYXRhYmFzZUltcGwoKTsKKyAgICB2b2lkIHJlYWRGcm9t
RGF0YWJhc2UoKTsKICAgICB2b2lkIHRyaWdnZXJXcml0ZVRvRGF0YWJhc2UoKTsKLSAgICBzdGF0
aWMgdm9pZCB3cml0ZVRvRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZSopOwotICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNlSW1wbCgpOworICAg
IHZvaWQgd3JpdGVUb0RhdGFiYXNlKCk7CiAKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fY2Fj
aGVkUG9zaXRpb247CiAgICAgTXV0ZXggbV9jYWNoZWRQb3NpdGlvbk11dGV4OwogICAgIFRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJZDsKLSAgICBNZXNzYWdlUXVldWU8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gbV9xdWV1ZTsKKyAgICBNZXNzYWdlUXVldWU8VGFzaz4gbV9xdWV1ZTsK
ICAgICBTdHJpbmcgbV9kYXRhYmFzZUZpbGU7CiAgICAgTXV0ZXggbV9kYXRhYmFzZUZpbGVNdXRl
eDsKIH07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGFzay5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Rhc2suaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02
NywxMSArNjgsMTEgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAotY2xhc3MgRGF0YWJhc2VUYXNr
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK2NsYXNzIERhdGFiYXNlVGFzayA6IHB1YmxpYyBUYXNr
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZVRhc2soKTsKIAotICAgIHZvaWQgcGVy
Zm9ybVRhc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKTsKIAogICAgIERhdGFi
YXNlKiBkYXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KICNpZm5kZWYgTkRF
QlVHCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suY3BwCShyZXZpc2lvbiA3NDg4
OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsMTAgKzUxLDYgQEAgTG9jYWxTdG9yYWdlVGFzazo6TG9jYWxTdG9yYWdlVGFzayhU
eXBlIAogICAgIEFTU0VSVChtX3R5cGUgPT0gVGVybWluYXRlVGhyZWFkKTsKIH0KIAotTG9jYWxT
dG9yYWdlVGFzazo6fkxvY2FsU3RvcmFnZVRhc2soKQotewotfQotCiB2b2lkIExvY2FsU3RvcmFn
ZVRhc2s6OnBlcmZvcm1UYXNrKCkKIHsKICAgICBzd2l0Y2ggKG1fdHlwZSkgewpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL0xvY2FsU3RvcmFnZVRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9Mb2NhbFN0b3JhZ2VUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zNywxOCArMzgsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIExvY2FsU3RvcmFnZVRocmVhZDsKIAogICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhp
cyBjbGFzcyB0byBTdG9yYWdlVGFzawotICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJs
aWMgTm9uY29weWFibGUgeworICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgVGFz
ayB7CiAgICAgcHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3lu
YywgRGVsZXRlRW1wdHlEYXRhYmFzZSwgVGVybWluYXRlVGhyZWFkIH07CiAKLSAgICAgICAgfkxv
Y2FsU3RvcmFnZVRhc2soKTsKLQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3Jh
Z2VUYXNrPiBjcmVhdGVJbXBvcnQoU3RvcmFnZUFyZWFTeW5jKiBhcmVhKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgTG9jYWxTdG9yYWdlVGFzayhBcmVhSW1wb3J0LCBhcmVhKSk7IH0KICAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFzaz4gY3JlYXRlU3luYyhTdG9yYWdlQXJl
YVN5bmMqIGFyZWEpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKEFyZWFT
eW5jLCBhcmVhKSk7IH0KICAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8TG9jYWxTdG9yYWdlVGFz
az4gY3JlYXRlRGVsZXRlRW1wdHlEYXRhYmFzZShTdG9yYWdlQXJlYVN5bmMqIGFyZWEpIHsgcmV0
dXJuIGFkb3B0UHRyKG5ldyBMb2NhbFN0b3JhZ2VUYXNrKERlbGV0ZUVtcHR5RGF0YWJhc2UsIGFy
ZWEpKTsgfQogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VUYXNrPiBjcmVh
dGVUZXJtaW5hdGUoTG9jYWxTdG9yYWdlVGhyZWFkKiB0aHJlYWQpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBMb2NhbFN0b3JhZ2VUYXNrKFRlcm1pbmF0ZVRocmVhZCwgdGhyZWFkKSk7IH0KIAotICAg
ICAgICB2b2lkIHBlcmZvcm1UYXNrKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFz
aygpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgTG9jYWxTdG9yYWdlVGFzayhUeXBlLCBTdG9y
YWdlQXJlYVN5bmMqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>77844</attachid>
            <date>2011-01-03 13:50:31 -0800</date>
            <delta_ts>2011-01-03 14:00:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-51818-20110103215025.patch</filename>
            <type>text/plain</type>
            <size>17117</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNzQ5MDcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTEtMDEtMDMgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSBzaG91bGQgbm90IHVzZSBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MTgxOAorCisg
ICAgICAgIEFkZHMgYSBuZXcgVGFzayBpbnRlcmZhY2UuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Rhc2suaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlRhc2s6On5UYXNrKToKKwogMjAxMS0wMS0wMiAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IFNp
bW9uIEZyYXNlci4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlz
aW9uIDc0ODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MDQsNiArNTA0LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRMaWJFeHRyYXMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9TdHJpbmdFeHRyYXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9TdHJpbmdIYXNoZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVENQYWNrZWRDYWNoZS5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1RDUGFnZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1RDU3BpbkxvY2suaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQkocmV2aXNpb24gNzQ4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNDE1LDYgKzQxNSw5IEBACiAgICAg
ICAgICAgICAnd3RmL1Bhc3NSZWZQdHIuaCcsCiAgICAgICAgICAgICAnd3RmL1BsYXRmb3JtLmgn
LAogICAgICAgICAgICAgJ3d0Zi9QdHJBbmRGbGFncy5oJywKKyAgICAgICAgICAgICd3dGYvcXQv
TWFpblRocmVhZFF0LmNwcCcsCisgICAgICAgICAgICAnd3RmL3F0L1N0cmluZ1F0LmNwcCcsCisg
ICAgICAgICAgICAnd3RmL3F0L1RocmVhZGluZ1F0LmNwcCcsCiAgICAgICAgICAgICAnd3RmL1Jh
bmRvbU51bWJlci5jcHAnLAogICAgICAgICAgICAgJ3d0Zi9SYW5kb21OdW1iZXIuaCcsCiAgICAg
ICAgICAgICAnd3RmL1JhbmRvbU51bWJlclNlZWQuaCcsCkBAIC00MzIsMTAgKzQzNSw4IEBACiAg
ICAgICAgICAgICAnd3RmL1N0ZExpYkV4dHJhcy5oJywKICAgICAgICAgICAgICd3dGYvU3RyaW5n
RXh0cmFzLmgnLAogICAgICAgICAgICAgJ3d0Zi9TdHJpbmdIYXNoZXIuaCcsCisgICAgICAgICAg
ICAnd3RmL1Rhc2suaCcsCiAgICAgICAgICAgICAnd3RmL1RDUGFja2VkQ2FjaGUuaCcsCi0gICAg
ICAgICAgICAnd3RmL3F0L01haW5UaHJlYWRRdC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9xdC9T
dHJpbmdRdC5jcHAnLAotICAgICAgICAgICAgJ3d0Zi9xdC9UaHJlYWRpbmdRdC5jcHAnLAogICAg
ICAgICAgICAgJ3d0Zi9UQ1BhZ2VNYXAuaCcsCiAgICAgICAgICAgICAnd3RmL1RDU3BpbkxvY2su
aCcsCiAgICAgICAgICAgICAnd3RmL1RDU3lzdGVtQWxsb2MuY3BwJywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NDg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xODksNiArMTg5LDcgQEAKIAkJNDRERDQ4NTMwRkFFQTg1MDAwRDZCNEVCIC8qIFBh
c3NPd25QdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ0REQ0ODUyMEZBRUE4NTAwMEQ2QjRFQiAvKiBQYXNzT3duUHRyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTExRkM0QzkxMTdFRTI4NzAwNDI1
MjcyIC8qIE1ENS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTFGQzRDNzExN0VFMjNEMDA0MjUyNzIgLyogTUQ1LmNwcCAqLzsgfTsKIAkJNTExRkM0
Q0IxMTdFRTJBODAwNDI1MjcyIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTExRkM0Q0ExMTdFRTJBODAwNDI1MjcyIC8qIE1ENS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU5ODNCQ0U1MTJE
MjFEN0YwMDk2NjJENSAvKiBUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1OUMzRDdBNDEyRDIxQjFDMDBCRTQxNjYgLyogVGFzay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTVENTM3MjZGMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1RDUzNzI2RTBFMUM1NDg4MDAyMUU1NDkgLyogVHJhY2luZy5oICovOyB9
OwogCQk1RDVEOEFCNjBFMEQwQTcyMDBGOUM2OTIgLyoganNjIGluIENvcHkgSW50byBGcmFtZXdv
cmsgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRTEwODIyQTFDNzAw
NzM2OTc1IC8qIGpzYyAqLzsgfTsKIAkJNUQ1RDhBRDEwRTBEMEVCRTAwRjlDNjkyIC8qIGxpYmVk
aXQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1RDVEOEFEMDBFMEQwRUJFMDBGOUM2OTIgLyogbGliZWRpdC5keWxpYiAqLzsgfTsKQEAgLTc2
Myw2ICs3NjQsNyBAQAogCQk1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5m
cmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRy
ZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJv
YmpjLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGlib2JqYy5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJ
NTFGNjQ4RDYwQkI0RTJDQTAwMzNENzYwIC8qIFJldGFpblB0ci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmV0YWluUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU5QzNEN0E0MTJEMjFCMUMwMEJFNDE2NiAvKiBUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ1
MzcyNkQwRTFDNTQ2QjAwMjFFNTQ5IC8qIFRyYWNpbmcuZCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBUcmFjaW5nLmQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVENTM3MjZFMEUxQzU0
ODgwMDIxRTU0OSAvKiBUcmFjaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRyYWNpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ1MzcyN0QwRTFDNTVF
QzAwMjFFNTQ5IC8qIFRyYWNpbmdEdHJhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVHJhY2luZ0R0cmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ4
NSw2ICsxNDg3LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTlDM0Q3QTQxMkQyMUIx
QzAwQkU0MTY2IC8qIFRhc2suaCAqLywKIAkJCQk5M0FBNEY3NzA5NTcyNTFGMDA4NEIzQTcgLyog
QWx3YXlzSW5saW5lLmggKi8sCiAJCQkJOTM4QzRGNjkwQ0EwNkJDNzAwRDkzMTBBIC8qIEFTQ0lJ
Q1R5cGUuaCAqLywKIAkJCQk2NUUyMTdCODA4RTdFRUNDMDAyM0U1RjYgLyogQXNzZXJ0aW9ucy5j
cHAgKi8sCkBAIC0yMzc1LDYgKzIzNzgsNyBAQAogCQkJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEy
MyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCM0VGMDUxMkJDMjRERDAw
RDI5RUZGIC8qIFBhZ2VCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGRkY5OEQxMkJGRkY3
NTAwNzk1QkI4IC8qIFBhZ2VBbGxvY2F0aW9uQWxpZ25lZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTk4M0JDRTUxMkQyMUQ3RjAwOTY2MkQ1IC8qIFRhc2suaCBpbiBIZWFkZXJzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9UYXNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1Rhc2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRh
c2tfaAorI2RlZmluZSBUYXNrX2gKKworI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisKK25hbWVz
cGFjZSBXVEYgeworCitjbGFzcyBUYXNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkg
PSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6VGFzazsKKworI2Vu
ZGlmIC8vIFRhc2tfaApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc0OTA3KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAxMS0wMS0wMyAgU3RldmUgQmxvY2sgIDxz
dGV2ZWJsb2NrQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlIHNob3VsZCBub3QgdXNlIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUxODE4CisKKyAgICAgICAgQWRkcyBhIG5ldyBUYXNrIGludGVy
ZmFjZSB0aGF0IGlzIHVzZWQgYnkgZXhpc3RpbmcgdXNlcnMgb2YgdGFza3MKKyAgICAgICAgd2l0
aCBNZXNzYWdlUXVldWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCByZWZhY3RvcmluZyBvbmx5
LgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1Rhc2suaDogQWRkZWQuCisgICAg
ICAgICogZmlsZWFwaS9GaWxlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlVGhyZWFk
OjpGaWxlVGFzazo6RmlsZVRhc2spOgorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlVGFzazo6Q2FjaGVUYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlUmVhZFRhc2s6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZVJlYWRUYXNrOjpDYWNoZVJlYWRUYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hl
UmVhZFRhc2s6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlV3JpdGVUYXNr
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVXcml0ZVRhc2s6OkNhY2hlV3JpdGVU
YXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlV3JpdGVUYXNrOjpwZXJmb3JtVGFzayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9p
bnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dHJp
Z2dlclJlYWRGcm9tRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25Qb3Np
dGlvbkNhY2hlOjpyZWFkRnJvbURhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0
aW9uUG9zaXRpb25DYWNoZTo6dHJpZ2dlcldyaXRlVG9EYXRhYmFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZSk6CisgICAgICAg
ICogcGFnZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0Rh
dGFiYXNlVGFzay5oOgorICAgICAgICAqIHN0b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oOgorCiAy
MDExLTAxLTAzICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgW1F0XSBVbnJldmlld2VkIGJ1aWxkZml4IGZvciAtLW1pbmltYWwgYnVpbGQgYWZ0ZXIgcjc0
ODk1LgpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvVGFzay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1Rhc2suaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL1Rhc2suaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX1Rhc2tfaAorI2RlZmluZSBXZWJDb3Jl
X0ZXRF9UYXNrX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UYXNrLmg+CisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvZmlsZWFwaS9GaWxlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9m
aWxlYXBpL0ZpbGVUaHJlYWQuaAkocmV2aXNpb24gNzQ4ODgpCisrKyBXZWJDb3JlL2ZpbGVhcGkv
RmlsZVRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8
d3RmL01lc3NhZ2VRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGFzay5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTQsMTcgKzU1LDE1IEBA
IHB1YmxpYzoKICAgICBib29sIHN0YXJ0KCk7CiAgICAgdm9pZCBzdG9wKCk7CiAKLSAgICBjbGFz
cyBUYXNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICBjbGFzcyBUYXNrIDogcHVibGljIFdU
Rjo6VGFzayB7CiAgICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5UYXNrKCkgeyB9Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpID0gMDsKICAgICAgICAgdm9pZCogaW5zdGFu
Y2UoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlOyB9CiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBUYXNrKHZvaWQqIGluc3RhbmNlKSA6IG1faW5zdGFuY2UoaW5zdGFuY2UpIHsgfQogICAgICAg
ICB2b2lkKiBtX2luc3RhbmNlOwogICAgIH07CiAKLSAgICB2b2lkIHBvc3RUYXNrKFBhc3NPd25Q
dHI8VGFzaz4gdGFzayk7CisgICAgdm9pZCBwb3N0VGFzayhQYXNzT3duUHRyPFRhc2s+KTsKIAog
ICAgIHZvaWQgdW5zY2hlZHVsZVRhc2tzKGNvbnN0IHZvaWQqIGluc3RhbmNlKTsKIApJbmRleDog
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDc0ODg4
KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uUG9zaXRpb25DYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShHRU9MT0NBVElPTikKIAotI2lu
Y2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkdlb3Bvc2l0aW9uLmgiCiAjaW5j
bHVkZSAiU1FMVmFsdWUuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgpAQCAtNDQsNiAr
NDMsMzAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgaW50IG51bVVzZXJzID0gMDsK
IAorY2xhc3MgQ2FjaGVUYXNrIDogcHVibGljIFRhc2sgeworcHJvdGVjdGVkOgorICAgIENhY2hl
VGFzayhHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIGNhY2hlKSA6IG1fY2FjaGUoY2FjaGUpIHsg
fQorICAgIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSogY2FjaGUoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlOyB9Citwcml2YXRlOgorICAgIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSogbV9jYWNo
ZTsKK307CisKK2NsYXNzIENhY2hlUmVhZFRhc2sgOiBwdWJsaWMgQ2FjaGVUYXNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDYWNoZVJlYWRUYXNrPiBjcmVhdGUoR2VvbG9jYXRp
b25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENhY2hlUmVhZFRh
c2soY2FjaGUpKTsgfQorcHJpdmF0ZToKKyAgICBDYWNoZVJlYWRUYXNrKEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZSogY2FjaGUpIDogQ2FjaGVUYXNrKGNhY2hlKSB7IH0KKyAgICB2b2lkIHBlcmZv
cm1UYXNrKCkgeyBjYWNoZSgpLT5yZWFkRnJvbURhdGFiYXNlKCk7IH0KK307CisKK2NsYXNzIENh
Y2hlV3JpdGVUYXNrIDogcHVibGljIENhY2hlVGFzayB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q2FjaGVXcml0ZVRhc2s+IGNyZWF0ZShHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUq
IGNhY2hlKSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ2FjaGVXcml0ZVRhc2soY2FjaGUpKTsgfQor
cHJpdmF0ZToKKyAgICBDYWNoZVdyaXRlVGFzayhHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqIGNh
Y2hlKSA6IENhY2hlVGFzayhjYWNoZSkgeyB9CisgICAgdm9pZCBwZXJmb3JtVGFzaygpIHsgY2Fj
aGUoKS0+d3JpdGVUb0RhdGFiYXNlKCk7IH0KK307CisKIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNo
ZSogR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlOjppbnN0YW5jZSgpCiB7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUqLCBpbnN0YW5jZSwgKDApKTsKQEAg
LTEyMCwyMyArMTQzLDE2IEBAIHZvaWQqIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6dGhyZWFk
RW4KIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRocmVhZEVudHJ5UG9pbnRJbXBs
KCkKIHsKLSAgICB3aGlsZSAoT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRh
c2sgPSBtX3F1ZXVlLndhaXRGb3JNZXNzYWdlKCkpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCBhIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgaW4gdGhlIGNhbGxiYWNrLCBzbyBwYXNzIDAgaGVy
ZS4KLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soMCk7Ci0gICAgfQorICAgIHdoaWxlIChPd25Q
dHI8VGFzaz4gdGFzayA9IG1fcXVldWUud2FpdEZvck1lc3NhZ2UoKSkKKyAgICAgICAgdGFzay0+
cGVyZm9ybVRhc2soKTsKIH0KIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdn
ZXJSZWFkRnJvbURhdGFiYXNlKCkKIHsKLSAgICBtX3F1ZXVlLmFwcGVuZChjcmVhdGVDYWxsYmFj
a1Rhc2soJkdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZSwgdGhpcykp
OwotfQotCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkK
LXsKLSAgICBjYWNoZS0+cmVhZEZyb21EYXRhYmFzZUltcGwoKTsKKyAgICBtX3F1ZXVlLmFwcGVu
ZChDYWNoZVJlYWRUYXNrOjpjcmVhdGUodGhpcykpOwogfQogCi12b2lkIEdlb2xvY2F0aW9uUG9z
aXRpb25DYWNoZTo6cmVhZEZyb21EYXRhYmFzZUltcGwoKQordm9pZCBHZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGU6OnJlYWRGcm9tRGF0YWJhc2UoKQogewogICAgIFNRTGl0ZURhdGFiYXNlIGRhdGFi
YXNlOwogICAgIHsKQEAgLTE4NywxNSArMjAzLDEwIEBAIHZvaWQgR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlOjpyZWFkRnJvbUQKIAogdm9pZCBHZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGU6OnRyaWdn
ZXJXcml0ZVRvRGF0YWJhc2UoKQogewotICAgIG1fcXVldWUuYXBwZW5kKGNyZWF0ZUNhbGxiYWNr
VGFzayh3cml0ZVRvRGF0YWJhc2UsIHRoaXMpKTsKLX0KLQotdm9pZCBHZW9sb2NhdGlvblBvc2l0
aW9uQ2FjaGU6OndyaXRlVG9EYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgR2VvbG9j
YXRpb25Qb3NpdGlvbkNhY2hlKiBjYWNoZSkKLXsKLSAgICBjYWNoZS0+d3JpdGVUb0RhdGFiYXNl
SW1wbCgpOworICAgIG1fcXVldWUuYXBwZW5kKENhY2hlV3JpdGVUYXNrOjpjcmVhdGUodGhpcykp
OwogfQogCi12b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlSW1w
bCgpCit2b2lkIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZTo6d3JpdGVUb0RhdGFiYXNlKCkKIHsK
ICAgICBTUUxpdGVEYXRhYmFzZSBkYXRhYmFzZTsKICAgICB7CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb25Qb3NpdGlvbkNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0dl
b2xvY2F0aW9uUG9zaXRpb25DYWNoZS5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvcGFn
ZS9HZW9sb2NhdGlvblBvc2l0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTUgKzI3
LDE2IEBACiAjZGVmaW5lIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZV9oCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9UYXNrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ2FjaGVS
ZWFkVGFzazsKK2NsYXNzIENhY2hlV3JpdGVUYXNrOwogY2xhc3MgR2VvcG9zaXRpb247CiAKIC8v
IE1haW50YWlucyBhIGNhY2hlZCBwb3NpdGlvbiBmb3IgR2VvbG9jYXRpb24uIFRha2VzIGNhcmUg
b2Ygd3JpdGluZyBhbmQKQEAgLTQzLDYgKzQ0LDggQEAgY2xhc3MgR2VvcG9zaXRpb247CiAvLyBz
cGVjIGRvZXMgbm90IHJlcXVpcmUgYSBjYWNoZWQgcG9zaXRpb24gdG8gYmUgbWFpbnRhaW5lZCwg
c28gd2UgdGFrZSBhCiAvLyBiZXN0LWVmZm9ydCBhcHByb2FjaCB3aGVyZSB3ZSBkbyBub3Qgd2Fp
dCBmb3IgZGF0YWJhc2UgcmVhZHMgb3Igd3JpdGVzLgogY2xhc3MgR2VvbG9jYXRpb25Qb3NpdGlv
bkNhY2hlIHsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVSZWFkVGFzazsKKyAgICBmcmllbmQgY2xh
c3MgQ2FjaGVXcml0ZVRhc2s7CiBwdWJsaWM6CiAgICAgc3RhdGljIEdlb2xvY2F0aW9uUG9zaXRp
b25DYWNoZSogaW5zdGFuY2UoKTsKIApAQCAtNjEsMTYgKzY0LDE0IEBAIHByaXZhdGU6CiAgICAg
dm9pZCB0aHJlYWRFbnRyeVBvaW50SW1wbCgpOwogCiAgICAgdm9pZCB0cmlnZ2VyUmVhZEZyb21E
YXRhYmFzZSgpOwotICAgIHN0YXRpYyB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOwotICAgIHZvaWQgcmVhZEZy
b21EYXRhYmFzZUltcGwoKTsKKyAgICB2b2lkIHJlYWRGcm9tRGF0YWJhc2UoKTsKICAgICB2b2lk
IHRyaWdnZXJXcml0ZVRvRGF0YWJhc2UoKTsKLSAgICBzdGF0aWMgdm9pZCB3cml0ZVRvRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEdlb2xvY2F0aW9uUG9zaXRpb25DYWNoZSopOwot
ICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNlSW1wbCgpOworICAgIHZvaWQgd3JpdGVUb0RhdGFiYXNl
KCk7CiAKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fY2FjaGVkUG9zaXRpb247CiAgICAgTXV0
ZXggbV9jYWNoZWRQb3NpdGlvbk11dGV4OwogICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWRJ
ZDsKLSAgICBNZXNzYWdlUXVldWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gbV9xdWV1
ZTsKKyAgICBNZXNzYWdlUXVldWU8VGFzaz4gbV9xdWV1ZTsKICAgICBTdHJpbmcgbV9kYXRhYmFz
ZUZpbGU7CiAgICAgTXV0ZXggbV9kYXRhYmFzZUZpbGVNdXRleDsKIH07CkluZGV4OiBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGFzay5oCShyZXZpc2lvbiA3NDg4OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Rhc2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC02NywxMSArNjgsMTEgQEAgcHJpdmF0
ZToKICNlbmRpZgogfTsKIAotY2xhc3MgRGF0YWJhc2VUYXNrIDogcHVibGljIE5vbmNvcHlhYmxl
IHsKK2NsYXNzIERhdGFiYXNlVGFzayA6IHB1YmxpYyBUYXNrIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5EYXRhYmFzZVRhc2soKTsKIAotICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGVyZm9ybVRhc2soKTsKIAogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YWJhc2U7IH0KICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvTG9jYWxTdG9yYWdlVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9M
b2NhbFN0b3JhZ2VUYXNrLmgJKHJldmlzaW9uIDc0ODg4KQorKysgV2ViQ29yZS9zdG9yYWdlL0xv
Y2FsU3RvcmFnZVRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1Rhc2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM3LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IExvY2FsU3RvcmFnZVRocmVhZDsKIAogICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhpcyBjbGFzcyB0
byBTdG9yYWdlVGFzawotICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgTm9uY29w
eWFibGUgeworICAgIGNsYXNzIExvY2FsU3RvcmFnZVRhc2sgOiBwdWJsaWMgVGFzayB7CiAgICAg
cHVibGljOgogICAgICAgICBlbnVtIFR5cGUgeyBBcmVhSW1wb3J0LCBBcmVhU3luYywgRGVsZXRl
RW1wdHlEYXRhYmFzZSwgVGVybWluYXRlVGhyZWFkIH07CiAKQEAgLTQ4LDcgKzQ5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgUGFzc093blB0cjxMb2NhbFN0b3JhZ2VU
YXNrPiBjcmVhdGVEZWxldGVFbXB0eURhdGFiYXNlKFN0b3JhZ2VBcmVhU3luYyogYXJlYSkgeyBy
ZXR1cm4gYWRvcHRQdHIobmV3IExvY2FsU3RvcmFnZVRhc2soRGVsZXRlRW1wdHlEYXRhYmFzZSwg
YXJlYSkpOyB9CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPExvY2FsU3RvcmFnZVRhc2s+IGNy
ZWF0ZVRlcm1pbmF0ZShMb2NhbFN0b3JhZ2VUaHJlYWQqIHRocmVhZCkgeyByZXR1cm4gYWRvcHRQ
dHIobmV3IExvY2FsU3RvcmFnZVRhc2soVGVybWluYXRlVGhyZWFkLCB0aHJlYWQpKTsgfQogCi0g
ICAgICAgIHZvaWQgcGVyZm9ybVRhc2soKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1U
YXNrKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBMb2NhbFN0b3JhZ2VUYXNrKFR5cGUsIFN0
b3JhZ2VBcmVhU3luYyopOwo=
</data>
<flag name="review"
          id="69052"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>