<?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>99864</bug_id>
          
          <creation_ts>2012-10-19 12:39:18 -0700</creation_ts>
          <short_desc>Add a main resource type to the memory cache</short_desc>
          <delta_ts>2012-10-29 01:56:51 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>49246</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nate Chapin">japhet</reporter>
          <assigned_to name="Nate Chapin">japhet</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>d-r</cc>
    
    <cc>jberlin</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>746539</commentid>
    <comment_count>0</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-19 12:39:18 -0700</bug_when>
    <thetext>The behavior of a main resource in the cache can very closely match how CachedRawResource currently operates. It seems feasible to add a new CachedResource::Type for main resources, but re-use most of the CachedRawResource implementation.  It will require a couple extra functions on CachedRawResource, and a couple of extra pieces of data from SubresourceLoader.

Note that this patch will just be infrastructure.  Switching main resources over to actually use this infrastructure will happen later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746597</commentid>
    <comment_count>1</comment_count>
      <attachid>169686</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-19 13:30:52 -0700</bug_when>
    <thetext>Created attachment 169686
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746611</commentid>
    <comment_count>2</comment_count>
      <attachid>169686</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-19 13:55:44 -0700</bug_when>
    <thetext>Comment on attachment 169686
patch

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

&gt; Source/WebCore/loader/SubresourceLoader.cpp:154
&gt; +    if (newRequest.isNull()) {
&gt; +        cancel(frameLoader()-&gt;client()-&gt;interruptedForPolicyChangeError(newRequest));
&gt; +        return;
&gt; +    }
&gt; +    m_resource-&gt;updateResourceRequest(newRequest);

This part puzzles me.  Why is this needed?

&gt; Source/WebCore/loader/cache/CachedRawResource.cpp:122
&gt; +    if (type() == MainResource)
&gt; +        return;

Should the callers do this instead?  It seems odd for the CachedRawResource to filter out these headers.

&gt; Source/WebCore/loader/cache/CachedRawResource.h:69
&gt; +    virtual void addAdditionalRequestHeaders(CachedResourceLoader*);

Could you be willing to add the OVERRIDE keyword here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746619</commentid>
    <comment_count>3</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-19 14:03:40 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 169686 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169686&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/SubresourceLoader.cpp:154
&gt; &gt; +    if (newRequest.isNull()) {
&gt; &gt; +        cancel(frameLoader()-&gt;client()-&gt;interruptedForPolicyChangeError(newRequest));
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +    m_resource-&gt;updateResourceRequest(newRequest);
&gt; 
&gt; This part puzzles me.  Why is this needed?


The if statement is because, for reasons I haven&apos;t quite nailed down, if we don&apos;t manually cancel there on a null request, we end up getting valid didReceiveReponse() calls. I should look more into that.

The updateResourceRequest() call is necessary because DocumentLoader expects to be kept fully update date on the ResourceRequest being used for a main resource load.

Most notably, without some way of plumbing this out here, document.referrer breaks in the case where willSendRequest() calls out to the WebKit layer and changes the referrer. This is because document.referrer just reads the referrer header off of DocumentLoader::m_request. This manifests in the test http/tests/security/no-referrer.html, which calls testRunner.setWillSendRequestClearHeader(&quot;Referer&quot;).

There may be a better way of plumbing that data, let me play with it.

&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedRawResource.cpp:122
&gt; &gt; +    if (type() == MainResource)
&gt; &gt; +        return;
&gt; 
&gt; Should the callers do this instead?  It seems odd for the CachedRawResource to filter out these headers.
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedRawResource.h:69
&gt; &gt; +    virtual void addAdditionalRequestHeaders(CachedResourceLoader*);
&gt; 
&gt; Could you be willing to add the OVERRIDE keyword here?


I figured it was a tossup between doing it this way or just having a similar check before the only callsite in CachedResource::load().

Given that it&apos;s only one callsite, I think your way may be better. In that case, the OVERRIDE keyword shouldn&apos;t be necessary, as this won&apos;t need to be virtual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746696</commentid>
    <comment_count>4</comment_count>
      <attachid>169707</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-19 15:21:49 -0700</bug_when>
    <thetext>Created attachment 169707
Address abarth&apos;s comments

In the interest of simplification, I changed the cancel() call in SubresourceLoader::willSendRequest() to be a regular cancel, rather than using a custom ResourceError type.

I don&apos;t think that error was particularly meaningful, as it&apos;s the result of MainResourceLoader calling PolicyChecker::checkNavigationPolicy() with a null ResourceRequest.  It might as well be a general cancellation, as that&apos;s effectively what the WebKit layer is doing by nulling out a ResourceRequest.  That will mean one more test with changing expectations when this code comes into use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750590</commentid>
    <comment_count>5</comment_count>
      <attachid>169707</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 02:36:44 -0700</bug_when>
    <thetext>Comment on attachment 169707
Address abarth&apos;s comments

This looks great.  Thanks for updating the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750596</commentid>
    <comment_count>6</comment_count>
      <attachid>169707</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 02:48:32 -0700</bug_when>
    <thetext>Comment on attachment 169707
Address abarth&apos;s comments

Rejecting attachment 169707 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
unk #3 FAILED at 287.
1 out of 3 hunks FAILED -- saving rejects to file Source/WebCore/loader/SubresourceLoader.cpp.rej
patching file Source/WebCore/platform/network/ResourceLoadPriority.h
patching file Source/WebCore/platform/network/cf/ResourceRequestCFNet.h
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Adam Barth&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/14552557</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751047</commentid>
    <comment_count>7</comment_count>
      <attachid>170693</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2012-10-25 11:27:19 -0700</bug_when>
    <thetext>Created attachment 170693
Merge + change CachedResourceLoader call

The only non-merge change here is that instead of CachedResourceLoader::requestRawResource() taking a CachedResource::Type, I just split it out into a separate requestMainResource() function.  This better matches how CachedResourceLoader functions are formatted post-r132157.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751121</commentid>
    <comment_count>8</comment_count>
      <attachid>170693</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-25 12:35:32 -0700</bug_when>
    <thetext>Comment on attachment 170693
Merge + change CachedResourceLoader call

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751139</commentid>
    <comment_count>9</comment_count>
      <attachid>170693</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 13:05:31 -0700</bug_when>
    <thetext>Comment on attachment 170693
Merge + change CachedResourceLoader call

Clearing flags on attachment: 170693

Committed r132520: &lt;http://trac.webkit.org/changeset/132520&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>751140</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-25 13:05:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752988</commentid>
    <comment_count>11</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-10-28 14:16:01 -0700</bug_when>
    <thetext>This caused the following build error on Mac:

/OpenSource/Source/WebCore/loader/cache/CachedRawResource.cpp:112:24: error: implicit conversion loses integer precision: &apos;uint64_t&apos; (aka &apos;unsigned long long&apos;) to &apos;unsigned long&apos; [-Werror,-Wshorten-64-to-32]
        m_identifier = m_loader-&gt;identifier();
                     ~ ^~~~~~~~~~~~~~~~~~~~~~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752989</commentid>
    <comment_count>12</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-10-28 14:17:33 -0700</bug_when>
    <thetext>Please ignore my last comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>753169</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-10-29 01:56:51 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; This caused the following build error on Mac:
&gt; 
&gt; /OpenSource/Source/WebCore/loader/cache/CachedRawResource.cpp:112:24: error: implicit conversion loses integer precision: &apos;uint64_t&apos; (aka &apos;unsigned long long&apos;) to &apos;unsigned long&apos; [-Werror,-Wshorten-64-to-32]
&gt;         m_identifier = m_loader-&gt;identifier();
&gt;                      ~ ^~~~~~~~~~~~~~~~~~~~~~

(In reply to comment #12)
&gt; Please ignore my last comment.

Where did this comment belong?  If you can&apos;t comment in a bugzilla can you email me?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169686</attachid>
            <date>2012-10-19 13:30:52 -0700</date>
            <delta_ts>2012-10-19 15:21:49 -0700</delta_ts>
            <desc>patch</desc>
            <filename>cache.txt</filename>
            <type>text/plain</type>
            <size>19145</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTkzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDEyLTEwLTE5ICBOYXRlIENo
YXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQWRkIGEgbWFpbiByZXNvdXJj
ZSB0eXBlIHRvIHRoZSBtZW1vcnkgY2FjaGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5ODY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZS4K
KworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aGFzVGV4dENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUpOgorICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdWJyZXNvdXJjZUxvYWRlcjo6d2lsbFNl
bmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6U3VicmVzb3VyY2VMb2FkZXI6OmRpZEZh
aWwpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVkUmF3UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVh
ZGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jl
c291cmNlOjpzZXRTaG91bGRCdWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJh
d1Jlc291cmNlOjpsb2FkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6
OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ2FjaGVkUmF3UmVzb3VyY2UpOgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZh
dWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkUmVz
b3VyY2VUeXBlVG9UYXJnZXRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
Ojp1cGRhdGVSZXNvdXJjZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRS
ZXNvdXJjZTo6c2V0UmVzb3VyY2VFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZTo6cmVzb3VyY2VFcnJvcik6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6aWdub3JlRm9yUmVxdWVzdENvdW50KToKKyAgICAg
ICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnJlcXVlc3RSYXdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNv
dXJjZUxvYWRlcjo6Y2hlY2tJbnNlY3VyZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFsaWRhdGlvblBvbGljeSk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmg6CisgICAgICAgIChDYWNoZWRSZXNv
dXJjZUxvYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlv
cml0eS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZO
ZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVzb3VyY2VMb2FkUHJpb3JpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9IVFRQUGlwZWxpbmluZ1ByaW9yaXR5KToKKwogMjAxMi0xMC0xOSAgSnVz
dGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBS
ZWR1Y2UgbWVtb3J5IGZvb3RwcmludCBvZiBjYW52YXMgcGF0dGVybiBvYmplY3Qgd2l0aCBkZWZl
cnJlZCByZW5kZXJpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMTMxOTIzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1
YnJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VCdWZm
ZXIuaCIKQEAgLTE0Niw2ICsxNDcsMTEgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVzb3Vy
Y2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsK
KyAgICBpZiAobmV3UmVxdWVzdC5pc051bGwoKSkgeworICAgICAgICBjYW5jZWwoZnJhbWVMb2Fk
ZXIoKS0+Y2xpZW50KCktPmludGVycnVwdGVkRm9yUG9saWN5Q2hhbmdlRXJyb3IobmV3UmVxdWVz
dCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVzb3VyY2UtPnVwZGF0ZVJlc291
cmNlUmVxdWVzdChuZXdSZXF1ZXN0KTsKIH0KIAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlk
U2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25n
IHRvdGFsQnl0ZXNUb0JlU2VudCkKQEAgLTE4Miw3ICsxODgsOSBAQAogICAgICAgICByZXR1cm47
CiAgICAgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CiAKLSAg
ICBpZiAocmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkgeworICAgIC8vIEZJWE1FOiBNYWluIHJlc291
cmNlcyBoYXZlIGEgZGlmZmVyZW50IHNldCBvZiBydWxlcyBmb3IgbXVsdGlwYXJ0IHRoYW4gaW1h
Z2VzIGRvLgorICAgIC8vIEhvcGVmdWxseSB3ZSBjYW4gbWVyZ2UgdGhvc2UgMiBwYXRocy4KKyAg
ICBpZiAocmVzcG9uc2UuaXNNdWx0aXBhcnQoKSAmJiBtX3Jlc291cmNlLT50eXBlKCkgIT0gQ2Fj
aGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkgewogICAgICAgICBtX2xvYWRpbmdNdWx0aXBhcnRD
b250ZW50ID0gdHJ1ZTsKIAogICAgICAgICAvLyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRzIGlu
IGEgQ2FjaGVkUmVzb3VyY2VMb2FkZXIncyByZXF1ZXN0IGNvdW50CkBAIC0yODMsNiArMjkxLDcg
QEAKICAgICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CiAgICAgQ2Fj
aGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3RSZXNvdXJjZShtX3Jlc291
cmNlKTsKICAgICBtX3N0YXRlID0gRmluaXNoaW5nOworICAgIG1fcmVzb3VyY2UtPnNldFJlc291
cmNlRXJyb3IoZXJyb3IpOwogICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNlOjpM
b2FkRXJyb3IpOwogICAgIGlmICghbV9yZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKICAgICAgICAg
bWVtb3J5Q2FjaGUoKS0+cmVtb3ZlKG1fcmVzb3VyY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHJldmlzaW9uIDEzMTkyMykKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSw3IEBACiAgICAgCiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsKKyAgICAg
ICAgTWFpblJlc291cmNlLAogICAgICAgICBJbWFnZVJlc291cmNlLAogICAgICAgICBDU1NTdHls
ZVNoZWV0LAogICAgICAgICBTY3JpcHQsCkBAIC0xMDMsOCArMTA0LDEyIEBACiAgICAgdmlydHVh
bCB2b2lkIGRhdGEoUGFzc1JlZlB0cjxSZXNvdXJjZUJ1ZmZlcj4gZGF0YSwgYm9vbCBhbGxEYXRh
UmVjZWl2ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBlcnJvcihDYWNoZWRSZXNvdXJjZTo6U3RhdHVz
KTsKIAorICAgIHZvaWQgc2V0UmVzb3VyY2VFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikgeyBtX2Vycm9yID0gZXJyb3I7IH0KKyAgICBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJj
ZUVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorCiAgICAgdmlydHVhbCBib29sIHNo
b3VsZElnbm9yZUhUVFBTdGF0dXNDb2RlRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
IAorICAgIHZvaWQgdXBkYXRlUmVzb3VyY2VSZXF1ZXN0KFJlc291cmNlUmVxdWVzdCYpOwogICAg
IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KCkgeyByZXR1cm4gbV9yZXNvdXJjZVJl
cXVlc3Q7IH0KICAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNl
UmVxdWVzdC51cmwoKTt9CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8VHlwZT4obV90eXBlKTsgfQpAQCAtMTUxLDcgKzE1Niw3IEBACiAgICAgdmlydHVhbCBib29s
IGlzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaWdub3JlRm9yUmVx
dWVzdENvdW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZQorICAgICAgICBy
ZXR1cm4gdHlwZSgpID09IE1haW5SZXNvdXJjZQogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQog
ICAgICAgICAgICAgfHwgdHlwZSgpID09IExpbmtQcmVmZXRjaAogICAgICAgICAgICAgfHwgdHlw
ZSgpID09IExpbmtTdWJyZXNvdXJjZQpAQCAtMzA3LDYgKzMxMiw4IEBACiAKICAgICBSZWZQdHI8
Q2FjaGVkTWV0YWRhdGE+IG1fY2FjaGVkTWV0YWRhdGE7CiAKKyAgICBSZXNvdXJjZUVycm9yIG1f
ZXJyb3I7CisKICAgICBkb3VibGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVzZWQgYXMg
YSAidGhyYXNoIGd1YXJkIiBpbiB0aGUgY2FjaGUKICAgICBkb3VibGUgbV9sb2FkRmluaXNoVGlt
ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3
UmVzb3VyY2UuY3BwCShyZXZpc2lvbiAxMzE5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2FjaGVkUmF3UmVzb3VyY2U6OkNhY2hlZFJh
d1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQotICAgIDogQ2FjaGVk
UmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCBSYXdSZXNvdXJjZSkKK0NhY2hlZFJhd1Jlc291cmNl
OjpDYWNoZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCwgVHlw
ZSB0eXBlKQorICAgIDogQ2FjaGVkUmVzb3VyY2UocmVzb3VyY2VSZXF1ZXN0LCB0eXBlKQogICAg
ICwgbV9pZGVudGlmaWVyKDApCiB7CiB9CkBAIC0xMTYsNiArMTE2LDEzIEBACiAgICAgICAgIGMt
PnJlc3BvbnNlUmVjZWl2ZWQodGhpcywgbV9yZXNwb25zZSk7CiB9CiAKK3ZvaWQgQ2FjaGVkUmF3
UmVzb3VyY2U6OmFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRl
ciogY2FjaGVkUmVzb3VyY2VMb2FkZXIpCit7CisgICAgaWYgKHR5cGUoKSA9PSBNYWluUmVzb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKyAgICBDYWNoZWRSZXNvdXJjZTo6YWRkQWRkaXRpb25hbFJl
cXVlc3RIZWFkZXJzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKK30KKwogdm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6ZGlkU2VuZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWdu
ZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkKIHsKICAgICBDYWNoZWRSZXNvdXJjZUNs
aWVudFdhbGtlcjxDYWNoZWRSYXdSZXNvdXJjZUNsaWVudD4gdyhtX2NsaWVudHMpOwpAQCAtMTI5
LDYgKzEzNiwxMSBAQAogICAgICAgICBtX2xvYWRlci0+c2V0RGVmZXJzTG9hZGluZyhkZWZlcnMp
OwogfQogCit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpzZXRTaG91bGRCdWZmZXJEYXRhKERhdGFC
dWZmZXJpbmdQb2xpY3kgc2hvdWxkQnVmZmVyRGF0YSkKK3sKKyAgICBtX29wdGlvbnMuc2hvdWxk
QnVmZmVyRGF0YSA9IHNob3VsZEJ1ZmZlckRhdGE7Cit9CisKIHN0YXRpYyBib29sIHNob3VsZEln
bm9yZUhlYWRlckZvckNhY2hlUmV1c2UoQXRvbWljU3RyaW5nIGhlYWRlck5hbWUpCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgbGlzdCBvZiBoZWFkZXJzIHRoYXQgZG9uJ3QgYWZmZWN0IGNhY2hlIHBv
bGljeSBhbG1vc3QgY2VydGFpbmx5IGlzbid0IGNvbXBsZXRlLgpAQCAtMTg0LDYgKzE5NiwxOSBA
QAogICAgIHJldHVybiB0cnVlOwogfQogCitTdWJyZXNvdXJjZUxvYWRlciogQ2FjaGVkUmF3UmVz
b3VyY2U6OmxvYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbG9hZGVyLmdldCgpOworfQor
Cit2b2lkIENhY2hlZFJhd1Jlc291cmNlOjpjbGVhcigpCit7CisgICAgbV9kYXRhLmNsZWFyKCk7
CisgICAgc2V0RW5jb2RlZFNpemUoMCk7CisgICAgaWYgKG1fbG9hZGVyKQorICAgICAgICBtX2xv
YWRlci0+Y2xlYXJSZXNvdXJjZURhdGEoKTsKK30KKwogdm9pZCBDYWNoZWRSYXdSZXNvdXJjZTo6
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBX
ZWJDb3JlTWVtb3J5VHlwZXM6OkNhY2hlZFJlc291cmNlUmF3KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lv
biAxMzE5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQAogICAgIENhY2hlZFJlc291
cmNlSGFuZGxlPENhY2hlZENTU1N0eWxlU2hlZXQ+IHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgIENhY2hlZFJlc291
cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gcmVxdWVzdFNjcmlwdChSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBTdHJpbmcmIGNoYXJzZXQpOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZv
bnQ+IHJlcXVlc3RGb250KFJlc291cmNlUmVxdWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlPENhY2hlZFJhd1Jlc291cmNlPiByZXF1ZXN0UmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zJik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5k
bGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlcXVlc3RSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3Qm
LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSA9IENh
Y2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZSk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNWR0RvY3VtZW50PiByZXF1ZXN0U1ZHRG9jdW1lbnQoUmVz
b3VyY2VSZXF1ZXN0Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDM1ICs2
MSwzNyBAQAogc3RhdGljIFJlc291cmNlTG9hZFByaW9yaXR5IGRlZmF1bHRQcmlvcml0eUZvclJl
c291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgewotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDsKLSAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6U2NyaXB0OgotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVz
b3VyY2U6Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgotICAgICAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOwotICAgICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5TG93OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToK
KyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CisgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9h
ZFByaW9yaXR5SGlnaDsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJlc291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OlJhd1Jlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW07
CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgcmV0dXJu
IFJlc291cmNlTG9hZFByaW9yaXR5TG93OwogI2lmIEVOQUJMRShYU0xUKQotICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgotICAgICAgICAgICAgcmV0dXJuIFJlc291
cmNlTG9hZFByaW9yaXR5SGlnaDsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNo
ZWV0OgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOwogI2VuZGlmCiAj
aWYgRU5BQkxFKFNWRykKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRS
ZXNvdXJjZToKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgorICAgICAgICByZXR1
cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7CiAjZW5kaWYKICNpZiBFTkFCTEUoTElOS19QUkVG
RVRDSCkKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgICAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKLSAgICAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIFJlc291
cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJl
ZmV0Y2g6CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7CisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVz
b3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93OwogI2VuZGlmCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSAgICAg
ICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFBy
aW9yaXR5TG93OwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpTaGFkZXJSZXNvdXJjZToKLSAgICAgICAgICAgIHJldHVybiBSZXNv
dXJjZUxvYWRQcmlvcml0eU1lZGl1bTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTaGFkZXJS
ZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOwogI2Vu
ZGlmCiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTAwLDYgKzEwMiw4IEBA
CiBzdGF0aWMgUmVzb3VyY2VSZXF1ZXN0OjpUYXJnZXRUeXBlIGNhY2hlZFJlc291cmNlVHlwZVRv
VGFyZ2V0VHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0
dXJuIFJlc291cmNlUmVxdWVzdDo6VGFyZ2V0SXNNYWluRnJhbWU7CiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoKICNpZiBFTkFCTEUoWFNMVCkKICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgpAQCAtMzY5LDYgKzM3MywxNCBAQAogICAgIHJldHVy
biAwOwogfQogCit2b2lkIENhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNvdXJjZVJlcXVlc3QoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIERvbid0IHVwZGF0ZSB0aGUgcmVxdWVz
dCBvbiByZWRpcmVjdCBhcyB0aGlzIHdpbGwgY2hhbmdlIHRoZSBDYWNoZWRSZXNvdXJjZSB1cmws
CisgICAgLy8gYW5kIGNoYW5naW5nIHRoZSBrZXkgb24gd2hpY2ggd2UgaW5kZXggdGhlIGNhY2hl
IGlzIGJhZC4KKyAgICBpZiAobV9yZXNvdXJjZVJlcXVlc3QudXJsKCkgPT0gcmVxdWVzdC51cmwo
KSkKKyAgICAgICAgbV9yZXNvdXJjZVJlcXVlc3QgPSByZXF1ZXN0OworfQorCiB2b2lkIENhY2hl
ZFJlc291cmNlOjpzZXRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkK
IHsKICAgICBtX3Jlc3BvbnNlID0gcmVzcG9uc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2UuaAkocmV2aXNpb24gMTMxOTIzKQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jlc291cmNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDE5ICsyOSwyNSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ2Fj
aGVkUmF3UmVzb3VyY2VDYWxsYmFjazsKIGNsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2xpZW50Owor
Y2xhc3MgU3VicmVzb3VyY2VMb2FkZXI7CiAKIGNsYXNzIENhY2hlZFJhd1Jlc291cmNlIDogcHVi
bGljIENhY2hlZFJlc291cmNlIHsKIHB1YmxpYzoKLSAgICBDYWNoZWRSYXdSZXNvdXJjZShSZXNv
dXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmLCBU
eXBlKTsKIAogICAgIC8vIEZJWE1FOiBBc3NvY2lhdGVkVVJMTG9hZGVyIHNob3VsZG4ndCBiZSBh
IERvY3VtZW50VGhyZWFkYWJsZUxvYWRlciBhbmQgdGhlcmVmb3JlIHNob3VsZG4ndAogICAgIC8v
IHVzZSBDYWNoZWRSYXdSZXNvdXJjZS4gSG93ZXZlciwgaXQgaXMsIGFuZCBpdCBuZWVkcyB0byBi
ZSBhYmxlIHRvIGRlZmVyIGxvYWRpbmcuCiAgICAgLy8gVGhpcyBjYW4gYmUgZml4ZWQgYnkgc3Bs
aXR0aW5nIENPUlMgcHJlZmxpZ2h0aW5nIG91dCBvZiBEb2N1bWVudFRocmVhY2FibGVMb2FkZXIu
CiAgICAgdmlydHVhbCB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2hvdWxkQnVmZmVyRGF0YShEYXRhQnVmZmVyaW5nUG9saWN5KTsKICAgICAKICAg
ICAvLyBGSVhNRTogVGhpcyBpcyBleHBvc2VkIGZvciB0aGUgSW5wc2VjdG9ySW5zdHJ1bWVudGF0
aW9uIGZvciBwcmVmbGlnaHRzIGluIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlci4gSXQncyBhbHNv
IHJlYWxseSBsYW1lLgogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1faWRlbnRpZmllcjsgfQogCisgICAgU3VicmVzb3VyY2VMb2FkZXIqIGxvYWRlcigpIGNv
bnN0OworICAgIHZvaWQgY2xlYXIoKTsKKwogICAgIGJvb2wgY2FuUmV1c2UoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2Uo
TWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJSSURFOwpAQCAtNjAsNiArNjYsOCBAQAogICAg
IHZpcnR1YWwgdm9pZCBkaWREb3dubG9hZERhdGEoaW50KTsKICNlbmRpZgogCisgICAgdmlydHVh
bCB2b2lkIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciop
OworCiAgICAgdW5zaWduZWQgbG9uZyBtX2lkZW50aWZpZXI7CiB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDggQEAKICAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CiAgICAgICAgIHJldHVybiBuZXcgQ2Fj
aGVkRm9udChyZXF1ZXN0KTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToK
LSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSYXdSZXNvdXJjZShyZXF1ZXN0KTsKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVk
UmF3UmVzb3VyY2UocmVxdWVzdCwgdHlwZSk7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2FzZSBD
YWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRY
U0xTdHlsZVNoZWV0KHJlcXVlc3QpOwpAQCAtMjQyLDkgKzI0Myw5IEBACiB9CiAjZW5kaWYKIAot
Q2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9h
ZGVyOjpyZXF1ZXN0UmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlvbnMpCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNo
ZWRSYXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSYXdSZXNvdXJjZShS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0
aW9ucywgQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Q2FjaGVkUmF3UmVzb3VyY2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlJh
d1Jlc291cmNlLCByZXF1ZXN0LCBTdHJpbmcoKSwgb3B0aW9ucywgUmVzb3VyY2VMb2FkUHJpb3Jp
dHlVbnJlc29sdmVkLCBmYWxzZSkuZ2V0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNo
ZWRSYXdSZXNvdXJjZSo+KHJlcXVlc3RSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBTdHJpbmcoKSwg
b3B0aW9ucywgUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkLCBmYWxzZSkuZ2V0KCkpOwog
fQogCiBib29sIENhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0luc2VjdXJlQ29udGVudChDYWNo
ZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwpIGNvbnN0CkBAIC0yODEsNiAr
MjgyLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKICAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpMaW5rU3VicmVzb3VyY2U6CkBAIC0yOTMsMTEgKzI5NSw3IEBACiAKIGJvb2wgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29u
c3QgS1VSTCYgdXJsLCBib29sIGZvclByZWxvYWQpCiB7Ci0gICAgLy8gRklYTUU6IFdoZW4gd2Ug
Y2FuIGxvYWQgbWFpbiByZXNvdXJjZXMgdGhyb3VnaCBDYWNoZWRSZXNvdXJjZUxvYWRlciwgd2Un
bGwgbmVlZCB0byBhbGxvdyBmb3IgbnVsbCBkb2N1bWVudCgpIGhlcmUuCi0gICAgaWYgKCFkb2N1
bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPmNhbkRpc3BsYXkodXJsKSkgeworICAgIGlmIChkb2N1bWVudCgpICYm
ICFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkpIHsKICAgICAg
ICAgaWYgKCFmb3JQcmVsb2FkKQogICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2Fs
TG9hZEZhaWxlZChkb2N1bWVudCgpLT5mcmFtZSgpLCB1cmwuc3RyaW5nKCkpOwogICAgICAgICBM
T0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJj
ZSBVUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5Iik7CkBA
IC0zMDgsNiArMzA2LDcgQEAKICAgICAvLyB0eXBlcyBvZiByZXNvdXJjZXMsIGxpa2UgSW1hZ2Vz
LCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUgbG9hZGVkIGZyb20KICAgICAvLyBhbnkgVVJMLgog
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJj
ZToKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2Ny
aXB0OgpAQCAtMzc1LDYgKzM3NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6
CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CiAjaWYgRU5BQkxFKExJTktf
UFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgpAQCAtNTE5
LDggKzUxOSwxMSBAQAogICAgICAgICByZXR1cm4gUmVsb2FkOwogICAgIH0KIAorICAgIGlmIChl
eGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkK
KyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKwogICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlICYmICFzdGF0aWNfY2FzdDxDYWNoZWRS
YXdSZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3VyY2UpLT5jYW5SZXVzZShyZXF1ZXN0KSkKLSAgICAg
ICAgIHJldHVybiBSZWxvYWQ7CisgICAgICAgIHJldHVybiBSZWxvYWQ7CiAKICAgICAvLyBDZXJ0
YWluIHJlcXVlc3RzIChlLmcuLCBYSFJzKSBtaWdodCBoYXZlIG1hbnVhbGx5IHNldCBoZWFkZXJz
IHRoYXQgcmVxdWlyZSByZXZhbGlkYXRpb24uCiAgICAgLy8gRklYTUU6IEluIHRoZW9yeSwgdGhp
cyBzaG91bGQgYmUgYSBSZXZhbGlkYXRlIGNhc2UuIEluIHByYWN0aWNlLCB0aGUgTWVtb3J5Q2Fj
aGUgcmV2YWxpZGF0aW9uIHBhdGggYXNzdW1lcyBhIHdob2xlIGJ1bmNoCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlvcml0
eS5oCShyZXZpc2lvbiAxMzE5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlTG9hZFByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDkgQEAK
ICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdywKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eU1l
ZGl1bSwKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2gsCisgICAgUmVzb3VyY2VMb2FkUHJp
b3JpdHlWZXJ5SGlnaCwKICAgICBSZXNvdXJjZUxvYWRQcmlvcml0eUxvd2VzdCA9IFJlc291cmNl
TG9hZFByaW9yaXR5VmVyeUxvdywKLSAgICBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2hlc3QgPSBS
ZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2gsCisgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0
ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaCwKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVz
dENGTmV0LmgJKHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiAr
NTQsOCBAQAogICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW07CiAgICAg
Y2FzZSAzOgogICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOworICAgIGNh
c2UgNDoKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g7CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRQcmlvcml0eUxvd2VzdDsKQEAgLTczLDYgKzc1LDggQEAKICAgICAgICAgcmV0
dXJuIDI7CiAgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g6CiAgICAgICAgIHJldHVy
biAzOworICAgIGNhc2UgUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDoKKyAgICAgICAgcmV0
dXJuIDQ7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24g
MTMxOTIzKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQAogc3RhdGljIGJvb2wgaGFzVGV4
dENvbnRlbnQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogewogICAgIEluc3BlY3Rv
clBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hl
ZFJlc291cmNlVHlwZSgqY2FjaGVkUmVzb3VyY2UpOwotICAgIHJldHVybiB0eXBlID09IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6U3R5bGVzaGVldFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFn
ZUFnZW50OjpTY3JpcHRSZXNvdXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6WEhS
UmVzb3VyY2U7CisgICAgcmV0dXJuIHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpEb2N1bWVu
dFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3Vy
Y2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUg
PT0gSW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKIH0KIAogc3RhdGljIFBhc3NSZWZQ
dHI8VGV4dFJlc291cmNlRGVjb2Rlcj4gY3JlYXRlWEhSVGV4dERlY29kZXIoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lKQpAQCAtMzA4LDYgKzMw
OCw4IEBACiAgICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNl
OwogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgogICAgICAgICByZXR1cm4g
SW5zcGVjdG9yUGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpNYWluUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OkRvY3Vt
ZW50UmVzb3VyY2U7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169707</attachid>
            <date>2012-10-19 15:21:49 -0700</date>
            <delta_ts>2012-10-25 11:27:19 -0700</delta_ts>
            <desc>Address abarth&apos;s comments</desc>
            <filename>cache2.txt</filename>
            <type>text/plain</type>
            <size>18449</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCShyZXZpc2lvbiAxMzE5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBACiBzdGF0
aWMgYm9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7
CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IEluc3BlY3RvclBh
Z2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJjZSk7Ci0gICAgcmV0dXJu
IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9
PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICByZXR1cm4gdHlwZSA9PSBJbnNwZWN0b3JQYWdl
QWdlbnQ6OkRvY3VtZW50UmVzb3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlN0
eWxlc2hlZXRSZXNvdXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVz
b3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlhIUlJlc291cmNlOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVjb2Rl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUp
CkBAIC0zMDgsNiArMzA4LDggQEAKICAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6
U2NyaXB0UmVzb3VyY2U7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CiAg
ICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlhIUlJlc291cmNlOworICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvclBh
Z2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVk
UmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCi0gICAgOiBDYWNo
ZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIFJhd1Jlc291cmNlKQorQ2FjaGVkUmF3UmVzb3Vy
Y2U6OkNhY2hlZFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBU
eXBlIHR5cGUpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIHR5cGUpCiAg
ICAgLCBtX2lkZW50aWZpZXIoMCkKIHsKIH0KQEAgLTEyOSw2ICsxMjksMTEgQEAKICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKIH0KIAordm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6c2V0U2hvdWxkQnVmZmVyRGF0YShEYXRhQnVmZmVyaW5nUG9saWN5IHNob3VsZEJ1
ZmZlckRhdGEpCit7CisgICAgbV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPSBzaG91bGRCdWZm
ZXJEYXRhOworfQorCiBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNl
KEF0b21pY1N0cmluZyBoZWFkZXJOYW1lKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgb2Yg
aGVhZGVycyB0aGF0IGRvbid0IGFmZmVjdCBjYWNoZSBwb2xpY3kgYWxtb3N0IGNlcnRhaW5seSBp
c24ndCBjb21wbGV0ZS4KQEAgLTE4NCw2ICsxODksMTkgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorU3VicmVzb3VyY2VMb2FkZXIqIENhY2hlZFJhd1Jlc291cmNlOjpsb2FkZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xvYWRlci5nZXQoKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJj
ZTo6Y2xlYXIoKQoreworICAgIG1fZGF0YS5jbGVhcigpOworICAgIHNldEVuY29kZWRTaXplKDAp
OworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPmNsZWFyUmVzb3VyY2VEYXRh
KCk7Cit9CisKIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJ
bmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNo
ZWRSZXNvdXJjZVJhdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgzLDcgKzgzLDggQEAKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVz
b3VyY2U6CiAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkRm9udChyZXF1ZXN0KTsKICAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRS
YXdSZXNvdXJjZShyZXF1ZXN0KTsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3Vy
Y2U6CisgICAgICAgIHJldHVybiBuZXcgQ2FjaGVkUmF3UmVzb3VyY2UocmVxdWVzdCwgdHlwZSk7
CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVl
dDoKICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRYU0xTdHlsZVNoZWV0KHJlcXVlc3QpOwpAQCAt
MjQyLDkgKzI0Myw5IEBACiB9CiAjZW5kaWYKIAotQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVk
UmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmF3UmVzb3VyY2UoUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmIG9wdGlv
bnMpCitDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRSYXdSZXNvdXJjZT4gQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXI6OnJlcXVlc3RSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucywgQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
dHlwZSkKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2UqPihyZXF1
ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlLCByZXF1ZXN0LCBTdHJpbmco
KSwgb3B0aW9ucywgUmVzb3VyY2VMb2FkUHJpb3JpdHlVbnJlc29sdmVkLCBmYWxzZSkuZ2V0KCkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZSo+KHJlcXVlc3RSZXNv
dXJjZSh0eXBlLCByZXF1ZXN0LCBTdHJpbmcoKSwgb3B0aW9ucywgUmVzb3VyY2VMb2FkUHJpb3Jp
dHlVbnJlc29sdmVkLCBmYWxzZSkuZ2V0KCkpOwogfQogCiBib29sIENhY2hlZFJlc291cmNlTG9h
ZGVyOjpjaGVja0luc2VjdXJlQ29udGVudChDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlLCBjb25z
dCBLVVJMJiB1cmwpIGNvbnN0CkBAIC0yODEsNiArMjgyLDcgQEAKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICB9CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgog
I2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQ
cmVmZXRjaDoKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CkBAIC0y
OTMsMTEgKzI5NSw3IEBACiAKIGJvb2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3Qo
Q2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZvclByZWxv
YWQpCiB7Ci0gICAgLy8gRklYTUU6IFdoZW4gd2UgY2FuIGxvYWQgbWFpbiByZXNvdXJjZXMgdGhy
b3VnaCBDYWNoZWRSZXNvdXJjZUxvYWRlciwgd2UnbGwgbmVlZCB0byBhbGxvdyBmb3IgbnVsbCBk
b2N1bWVudCgpIGhlcmUuCi0gICAgaWYgKCFkb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3BsYXko
dXJsKSkgeworICAgIGlmIChkb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdp
bigpLT5jYW5EaXNwbGF5KHVybCkpIHsKICAgICAgICAgaWYgKCFmb3JQcmVsb2FkKQogICAgICAg
ICAgICAgRnJhbWVMb2FkZXI6OnJlcG9ydExvY2FsTG9hZEZhaWxlZChkb2N1bWVudCgpLT5mcmFt
ZSgpLCB1cmwuc3RyaW5nKCkpOwogICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSZXNvdXJjZSBVUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNl
Y3VyaXR5T3JpZ2luOjpjYW5EaXNwbGF5Iik7CkBAIC0zMDgsNiArMzA2LDcgQEAKICAgICAvLyB0
eXBlcyBvZiByZXNvdXJjZXMsIGxpa2UgSW1hZ2VzLCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUg
bG9hZGVkIGZyb20KICAgICAvLyBhbnkgVVJMLgogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpJbWFnZVJlc291cmNlOgogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6
CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgpAQCAtMzc1LDYgKzM3NCw3IEBACiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6
UmF3UmVzb3VyY2U6CiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRS
ZXNvdXJjZTo6TGlua1ByZWZldGNoOgpAQCAtNTE5LDggKzUxOSwxMSBAQAogICAgICAgICByZXR1
cm4gUmVsb2FkOwogICAgIH0KIAorICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0g
Q2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKwog
ICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jl
c291cmNlICYmICFzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3Vy
Y2UpLT5jYW5SZXVzZShyZXF1ZXN0KSkKLSAgICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgICAg
IHJldHVybiBSZWxvYWQ7CiAKICAgICAvLyBDZXJ0YWluIHJlcXVlc3RzIChlLmcuLCBYSFJzKSBt
aWdodCBoYXZlIG1hbnVhbGx5IHNldCBoZWFkZXJzIHRoYXQgcmVxdWlyZSByZXZhbGlkYXRpb24u
CiAgICAgLy8gRklYTUU6IEluIHRoZW9yeSwgdGhpcyBzaG91bGQgYmUgYSBSZXZhbGlkYXRlIGNh
c2UuIEluIHByYWN0aWNlLCB0aGUgTWVtb3J5Q2FjaGUgcmV2YWxpZGF0aW9uIHBhdGggYXNzdW1l
cyBhIHdob2xlIGJ1bmNoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2UuaAkocmV2aXNpb24gMTMxOTIzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZFJlc291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAK
ICAgICAKIHB1YmxpYzoKICAgICBlbnVtIFR5cGUgeworICAgICAgICBNYWluUmVzb3VyY2UsCiAg
ICAgICAgIEltYWdlUmVzb3VyY2UsCiAgICAgICAgIENTU1N0eWxlU2hlZXQsCiAgICAgICAgIFNj
cmlwdCwKQEAgLTEwMyw2ICsxMDQsOSBAQAogICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQ
dHI8UmVzb3VyY2VCdWZmZXI+IGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICB2aXJ0
dWFsIHZvaWQgZXJyb3IoQ2FjaGVkUmVzb3VyY2U6OlN0YXR1cyk7CiAKKyAgICB2b2lkIHNldFJl
c291cmNlRXJyb3IoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpIHsgbV9lcnJvciA9IGVycm9y
OyB9CisgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcigpIGNvbnN0IHsgcmV0
dXJuIG1fZXJyb3I7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVz
Q29kZUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCgpIHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CkBAIC0x
NTEsNyArMTU1LDcgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgYm9vbCBpZ25vcmVGb3JSZXF1ZXN0Q291bnQoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlCisgICAgICAgIHJldHVybiB0eXBlKCkgPT0gTWFpblJlc291
cmNlCiAjaWYgRU5BQkxFKExJTktfUFJFRkVUQ0gpCiAgICAgICAgICAgICB8fCB0eXBlKCkgPT0g
TGlua1ByZWZldGNoCiAgICAgICAgICAgICB8fCB0eXBlKCkgPT0gTGlua1N1YnJlc291cmNlCkBA
IC0yNTUsOCArMjU5LDYgQEAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOb3Rp
ZnkoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIqKTsKLQogICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWduZWQp
OwogICAgIHZvaWQgc2V0RGVjb2RlZFNpemUodW5zaWduZWQpOwogICAgIHZvaWQgZGlkQWNjZXNz
RGVjb2RlZERhdGEoZG91YmxlIHRpbWVTdGFtcCk7CkBAIC0zMDMsMTAgKzMwNSwxMyBAQAogICAg
IGRvdWJsZSBjdXJyZW50QWdlKCkgY29uc3Q7CiAgICAgZG91YmxlIGZyZXNobmVzc0xpZmV0aW1l
KCkgY29uc3Q7CiAKKyAgICB2b2lkIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRS
ZXNvdXJjZUxvYWRlciopOwogICAgIHZvaWQgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAKICAgICBS
ZWZQdHI8Q2FjaGVkTWV0YWRhdGE+IG1fY2FjaGVkTWV0YWRhdGE7CiAKKyAgICBSZXNvdXJjZUVy
cm9yIG1fZXJyb3I7CisKICAgICBkb3VibGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVz
ZWQgYXMgYSAidGhyYXNoIGd1YXJkIiBpbiB0aGUgY2FjaGUKICAgICBkb3VibGUgbV9sb2FkRmlu
aXNoVGltZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJhd1Jl
c291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlLmgJKHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxOSArMjks
MjUgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENhY2hlZFJhd1Jlc291cmNlQ2FsbGJh
Y2s7CiBjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZUNsaWVudDsKK2NsYXNzIFN1YnJlc291cmNlTG9h
ZGVyOwogCiBjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZSA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZSB7
CiBwdWJsaWM6Ci0gICAgQ2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
Q2FjaGVkUmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiwgVHlwZSk7CiAKICAgICAvLyBGSVhN
RTogQXNzb2NpYXRlZFVSTExvYWRlciBzaG91bGRuJ3QgYmUgYSBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXIgYW5kIHRoZXJlZm9yZSBzaG91bGRuJ3QKICAgICAvLyB1c2UgQ2FjaGVkUmF3UmVzb3Vy
Y2UuIEhvd2V2ZXIsIGl0IGlzLCBhbmQgaXQgbmVlZHMgdG8gYmUgYWJsZSB0byBkZWZlciBsb2Fk
aW5nLgogICAgIC8vIFRoaXMgY2FuIGJlIGZpeGVkIGJ5IHNwbGl0dGluZyBDT1JTIHByZWZsaWdo
dGluZyBvdXQgb2YgRG9jdW1lbnRUaHJlYWNhYmxlTG9hZGVyLgogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWZlcnNMb2FkaW5nKGJvb2wpOworCisgICAgdmlydHVhbCB2b2lkIHNldFNob3VsZEJ1ZmZl
ckRhdGEoRGF0YUJ1ZmZlcmluZ1BvbGljeSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
ZXhwb3NlZCBmb3IgdGhlIElucHNlY3Rvckluc3RydW1lbnRhdGlvbiBmb3IgcHJlZmxpZ2h0cyBp
biBEb2N1bWVudFRocmVhZGFibGVMb2FkZXIuIEl0J3MgYWxzbyByZWFsbHkgbGFtZS4KICAgICB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0K
IAorICAgIFN1YnJlc291cmNlTG9hZGVyKiBsb2FkZXIoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFy
KCk7CisKICAgICBib29sIGNhblJldXNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBj
b25zdCBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNo
ZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxMzE5MjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNzYsNyArNzYsNyBAQAogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZENTU1N0eWxl
U2hlZXQ+IHJlcXVlc3RVc2VyQ1NTU3R5bGVTaGVldChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBT
dHJpbmcmIGNoYXJzZXQpOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4g
cmVxdWVzdFNjcmlwdChSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIGNoYXJzZXQpOwog
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZEZvbnQ+IHJlcXVlc3RGb250KFJlc291cmNl
UmVxdWVzdCYpOwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJhd1Jlc291cmNlPiBy
ZXF1ZXN0UmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VMb2FkZXJP
cHRpb25zJik7CisgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJl
cXVlc3RSYXdSZXNvdXJjZShSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZUxvYWRlck9w
dGlvbnMmLCBDYWNoZWRSZXNvdXJjZTo6VHlwZSA9IENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJj
ZSk7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNW
R0RvY3VtZW50PiByZXF1ZXN0U1ZHRG9jdW1lbnQoUmVzb3VyY2VSZXF1ZXN0Jik7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAJKHJldmlz
aW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDM1ICs2MSwzNyBAQAogc3RhdGljIFJlc291cmNl
TG9hZFByaW9yaXR5IGRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIENhY2hl
ZFJlc291cmNlOjpDU1NTdHlsZVNoZWV0OgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9h
ZFByaW9yaXR5SGlnaDsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6U2NyaXB0OgotICAg
ICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6Ci0gICAgICAgIGNhc2UgQ2Fj
aGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9h
ZFByaW9yaXR5TWVkaXVtOwotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291
cmNlOgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93OworICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNl
TG9hZFByaW9yaXR5VmVyeUhpZ2g7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVT
aGVldDoKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDsKKyAgICBjYXNl
IENhY2hlZFJlc291cmNlOjpTY3JpcHQ6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Rm9udFJl
c291cmNlOgorICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlOgorICAgICAgICBy
ZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW07CisgICAgY2FzZSBDYWNoZWRSZXNvdXJj
ZTo6SW1hZ2VSZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93
OwogI2lmIEVOQUJMRShYU0xUKQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHls
ZVNoZWV0OgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDsKKyAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0OgorICAgICAgICByZXR1cm4gUmVz
b3VyY2VMb2FkUHJpb3JpdHlIaWdoOwogI2VuZGlmCiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6U1ZHRG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgICAgIHJl
dHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUxvdzsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpT
VkdEb2N1bWVudFJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlM
b3c7CiAjZW5kaWYKICNpZiBFTkFCTEUoTElOS19QUkVGRVRDSCkKLSAgICAgICAgY2FzZSBDYWNo
ZWRSZXNvdXJjZTo6TGlua1ByZWZldGNoOgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9h
ZFByaW9yaXR5VmVyeUxvdzsKLSAgICAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1N1YnJl
c291cmNlOgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6CisgICAgICAgIHJldHVybiBS
ZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3c7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlu
a1N1YnJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQotICAgICAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpUZXh0VHJhY2tSZXNvdXJjZToKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxv
YWRQcmlvcml0eUxvdzsKKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpUZXh0VHJhY2tSZXNvdXJj
ZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93OwogI2VuZGlmCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTaGFkZXJS
ZXNvdXJjZToKLSAgICAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bTsK
KyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTaGFkZXJSZXNvdXJjZToKKyAgICAgICAgcmV0dXJu
IFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOwogI2VuZGlmCiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpAQCAtMTAwLDYgKzEwMiw4IEBACiBzdGF0aWMgUmVzb3VyY2VSZXF1ZXN0
OjpUYXJnZXRUeXBlIGNhY2hlZFJlc291cmNlVHlwZVRvVGFyZ2V0VHlwZShDYWNoZWRSZXNvdXJj
ZTo6VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVz
b3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIFJlc291cmNlUmVxdWVzdDo6VGFy
Z2V0SXNNYWluRnJhbWU7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6Q1NTU3R5bGVTaGVldDoK
ICNpZiBFTkFCTEUoWFNMVCkKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpYU0xTdHlsZVNoZWV0
OgpAQCAtMjc1LDggKzI3OSwxMCBAQAogICAgICAgICBtX3Jlc291cmNlUmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGQoIlB1cnBvc2UiLCAicHJlZmV0Y2giKTsKICNlbmRpZgogICAgIG1fcmVzb3Vy
Y2VSZXF1ZXN0LnNldFByaW9yaXR5KGxvYWRQcmlvcml0eSgpKTsKLSAgICBhZGRBZGRpdGlvbmFs
UmVxdWVzdEhlYWRlcnMoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogCisgICAgaWYgKHR5cGUoKSAh
PSBNYWluUmVzb3VyY2UpCisgICAgICAgIGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhjYWNo
ZWRSZXNvdXJjZUxvYWRlcik7CisKICAgICBtX2xvYWRlciA9IHJlc291cmNlTG9hZFNjaGVkdWxl
cigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChjYWNoZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUo
KSwgdGhpcywgbV9yZXNvdXJjZVJlcXVlc3QsIG1fcmVzb3VyY2VSZXF1ZXN0LnByaW9yaXR5KCks
IG9wdGlvbnMpOwogICAgIGlmICghbV9sb2FkZXIpIHsKICAgICAgICAgZmFpbEJlZm9yZVN0YXJ0
aW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5j
cHAJKHJldmlzaW9uIDEzMTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9TdWJyZXNvdXJj
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsOCBAQAogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KG5ld1JlcXVlc3Qs
IHJlZGlyZWN0UmVzcG9uc2UpOworICAgIGlmIChuZXdSZXF1ZXN0LmlzTnVsbCgpKQorICAgICAg
ICBjYW5jZWwoKTsKIH0KIAogdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkU2VuZERhdGEodW5z
aWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNU
b0JlU2VudCkKQEAgLTE4Miw3ICsxODQsOSBAQAogICAgICAgICByZXR1cm47CiAgICAgUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CiAKLSAgICBpZiAocmVzcG9u
c2UuaXNNdWx0aXBhcnQoKSkgeworICAgIC8vIEZJWE1FOiBNYWluIHJlc291cmNlcyBoYXZlIGEg
ZGlmZmVyZW50IHNldCBvZiBydWxlcyBmb3IgbXVsdGlwYXJ0IHRoYW4gaW1hZ2VzIGRvLgorICAg
IC8vIEhvcGVmdWxseSB3ZSBjYW4gbWVyZ2UgdGhvc2UgMiBwYXRocy4KKyAgICBpZiAocmVzcG9u
c2UuaXNNdWx0aXBhcnQoKSAmJiBtX3Jlc291cmNlLT50eXBlKCkgIT0gQ2FjaGVkUmVzb3VyY2U6
Ok1haW5SZXNvdXJjZSkgewogICAgICAgICBtX2xvYWRpbmdNdWx0aXBhcnRDb250ZW50ID0gdHJ1
ZTsKIAogICAgICAgICAvLyBXZSBkb24ndCBjb3VudCBtdWx0aVBhcnRzIGluIGEgQ2FjaGVkUmVz
b3VyY2VMb2FkZXIncyByZXF1ZXN0IGNvdW50CkBAIC0yODMsNiArMjg3LDcgQEAKICAgICBSZWZQ
dHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CiAgICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkUmVzb3VyY2U+IHByb3RlY3RSZXNvdXJjZShtX3Jlc291cmNlKTsKICAgICBt
X3N0YXRlID0gRmluaXNoaW5nOworICAgIG1fcmVzb3VyY2UtPnNldFJlc291cmNlRXJyb3IoZXJy
b3IpOwogICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNlOjpMb2FkRXJyb3IpOwog
ICAgIGlmICghbV9yZXNvdXJjZS0+aXNQcmVsb2FkZWQoKSkKICAgICAgICAgbWVtb3J5Q2FjaGUo
KS0+cmVtb3ZlKG1fcmVzb3VyY2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUxvYWRQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAkocmV2aXNpb24gMTMxOTIz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlvcml0
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw5IEBACiAgICAgUmVzb3VyY2VMb2FkUHJp
b3JpdHlMb3csCiAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW0sCiAgICAgUmVzb3VyY2VM
b2FkUHJpb3JpdHlIaWdoLAorICAgIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2gsCiAgICAg
UmVzb3VyY2VMb2FkUHJpb3JpdHlMb3dlc3QgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlMb3cs
Ci0gICAgUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoZXN0ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlI
aWdoLAorICAgIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaGVzdCA9IFJlc291cmNlTG9hZFByaW9y
aXR5VmVyeUhpZ2gsCiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2NmL1Jlc291cmNlUmVxdWVzdENGTmV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oCShyZXZpc2lvbiAx
MzE5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVx
dWVzdENGTmV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDggQEAKICAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TWVkaXVtOwogICAgIGNhc2UgMzoKICAgICAgICAgcmV0
dXJuIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDsKKyAgICBjYXNlIDQ6CisgICAgICAgIHJldHVy
biBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlM
b3dlc3Q7CkBAIC03Myw2ICs3NSw4IEBACiAgICAgICAgIHJldHVybiAyOwogICAgIGNhc2UgUmVz
b3VyY2VMb2FkUHJpb3JpdHlIaWdoOgogICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIFJlc291
cmNlTG9hZFByaW9yaXR5VmVyeUhpZ2g6CisgICAgICAgIHJldHVybiA0OwogICAgIH0KIAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTMxOTMxKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTItMTAtMTkgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9yZz4KKworICAg
ICAgICBBZGQgYSBtYWluIHJlc291cmNlIHR5cGUgdG8gdGhlIG1lbW9yeSBjYWNoZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4NjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5v
IGZ1bmN0aW9uYWxpdHkgY2hhbmdlLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNUZXh0Q29udGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZSk6CisgICAg
ICAgICogbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN1
YnJlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3Vi
cmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZFJhd1Jlc291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpD
YWNoZWRSYXdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6
YWRkQWRkaXRpb25hbFJlcXVlc3RIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OnNldFNob3VsZEJ1ZmZlckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmxvYWRlcik6CisgICAgICAgIChXZWJD
b3JlOjpDYWNoZWRSYXdSZXNvdXJjZTo6Y2xlYXIpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRSYXdSZXNvdXJjZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYWNoZWRS
YXdSZXNvdXJjZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmRlZmF1bHRQcmlvcml0eUZvclJlc291cmNlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjYWNoZWRSZXNvdXJjZVR5cGVUb1RhcmdldFR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2U6OnVwZGF0ZVJlc291cmNlUmVxdWVzdCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpzZXRSZXNvdXJjZUVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjpyZXNvdXJjZUVycm9yKToKKyAgICAgICAgKENh
Y2hlZFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjppZ25vcmVG
b3JSZXF1ZXN0Q291bnQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxv
YWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmVxdWVzdFJhd1Jlc291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpjaGVja0luc2VjdXJlQ29udGVudCk6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2FuUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGV0ZXJtaW5lUmV2YWxpZGF0
aW9uUG9saWN5KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIu
aDoKKyAgICAgICAgKENhY2hlZFJlc291cmNlTG9hZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlTG9hZFByaW9yaXR5Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oOgorICAgICAgICAoV2ViQ29yZTo6dG9SZXNvdXJj
ZUxvYWRQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjp0b0hUVFBQaXBlbGluaW5nUHJpb3Jp
dHkpOgorCiAyMDEyLTEwLTE5ICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbQ2hyb21pdW1dIFJlZHVjZSBtZW1vcnkgZm9vdHByaW50IG9mIGNhbnZhcyBw
YXR0ZXJuIG9iamVjdCB3aXRoIGRlZmVycmVkIHJlbmRlcmluZwo=
</data>
<flag name="review"
          id="183088"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="183089"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170693</attachid>
            <date>2012-10-25 11:27:19 -0700</date>
            <delta_ts>2012-10-25 13:05:31 -0700</delta_ts>
            <desc>Merge + change CachedResourceLoader call</desc>
            <filename>cache3.txt</filename>
            <type>text/plain</type>
            <size>17936</size>
            <attacher name="Nate Chapin">japhet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3Jp
dHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlTG9hZFByaW9yaXR5LmgJKHJldmlzaW9uIDEzMjUwMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VMb2FkUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsOCArMzUsOSBAQAogICAgIFJlc291cmNlTG9hZFByaW9yaXR5TG93LAogICAgIFJlc291cmNl
TG9hZFByaW9yaXR5TWVkaXVtLAogICAgIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaCwKKyAgICBS
ZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoLAogICAgIFJlc291cmNlTG9hZFByaW9yaXR5TG93
ZXN0ID0gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93LAotICAgIFJlc291cmNlTG9hZFByaW9y
aXR5SGlnaGVzdCA9IFJlc291cmNlTG9hZFByaW9yaXR5SGlnaCwKKyAgICBSZXNvdXJjZUxvYWRQ
cmlvcml0eUhpZ2hlc3QgPSBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdoLAogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RD
Rk5ldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaAkocmV2aXNpb24gMTMyNTAzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3RDRk5ldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw4IEBACiAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eU1lZGl1bTsKICAgICBjYXNlIDM6CiAgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0
eUhpZ2g7CisgICAgY2FzZSA0OgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlW
ZXJ5SGlnaDsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93ZXN0OwpAQCAtNzMsNiArNzUsOCBA
QAogICAgICAgICByZXR1cm4gMjsKICAgICBjYXNlIFJlc291cmNlTG9hZFByaW9yaXR5SGlnaDoK
ICAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBSZXNvdXJjZUxvYWRQcmlvcml0eVZlcnlIaWdo
OgorICAgICAgICByZXR1cm4gNDsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCShyZXZpc2lvbiAxMzI1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDcgKzEzOSw3IEBACiBzdGF0
aWMgYm9vbCBoYXNUZXh0Q29udGVudChDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UpCiB7
CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgdHlwZSA9IEluc3BlY3RvclBh
Z2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKCpjYWNoZWRSZXNvdXJjZSk7Ci0gICAgcmV0dXJu
IHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpTdHlsZXNoZWV0UmVzb3VyY2UgfHwgdHlwZSA9
PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlNjcmlwdFJlc291cmNlIHx8IHR5cGUgPT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpYSFJSZXNvdXJjZTsKKyAgICByZXR1cm4gdHlwZSA9PSBJbnNwZWN0b3JQYWdl
QWdlbnQ6OkRvY3VtZW50UmVzb3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlN0
eWxlc2hlZXRSZXNvdXJjZSB8fCB0eXBlID09IEluc3BlY3RvclBhZ2VBZ2VudDo6U2NyaXB0UmVz
b3VyY2UgfHwgdHlwZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6OlhIUlJlc291cmNlOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBjcmVhdGVYSFJUZXh0RGVjb2Rl
cihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUp
CkBAIC0zMDgsNiArMzA4LDggQEAKICAgICAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6
U2NyaXB0UmVzb3VyY2U7CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CiAg
ICAgICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlhIUlJlc291cmNlOworICAgIGNhc2Ug
Q2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJjZToKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvclBh
Z2VBZ2VudDo6RG9jdW1lbnRSZXNvdXJjZTsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
YXdSZXNvdXJjZS5jcHAJKHJldmlzaW9uIDEzMjUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DYWNoZWRSYXdSZXNvdXJjZTo6Q2FjaGVk
UmF3UmVzb3VyY2UoUmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QpCi0gICAgOiBDYWNo
ZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIFJhd1Jlc291cmNlKQorQ2FjaGVkUmF3UmVzb3Vy
Y2U6OkNhY2hlZFJhd1Jlc291cmNlKFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBU
eXBlIHR5cGUpCisgICAgOiBDYWNoZWRSZXNvdXJjZShyZXNvdXJjZVJlcXVlc3QsIHR5cGUpCiAg
ICAgLCBtX2lkZW50aWZpZXIoMCkKIHsKIH0KQEAgLTEyOSw2ICsxMjksMTEgQEAKICAgICAgICAg
bV9sb2FkZXItPnNldERlZmVyc0xvYWRpbmcoZGVmZXJzKTsKIH0KIAordm9pZCBDYWNoZWRSYXdS
ZXNvdXJjZTo6c2V0U2hvdWxkQnVmZmVyRGF0YShEYXRhQnVmZmVyaW5nUG9saWN5IHNob3VsZEJ1
ZmZlckRhdGEpCit7CisgICAgbV9vcHRpb25zLnNob3VsZEJ1ZmZlckRhdGEgPSBzaG91bGRCdWZm
ZXJEYXRhOworfQorCiBzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVIZWFkZXJGb3JDYWNoZVJldXNl
KEF0b21pY1N0cmluZyBoZWFkZXJOYW1lKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGxpc3Qgb2Yg
aGVhZGVycyB0aGF0IGRvbid0IGFmZmVjdCBjYWNoZSBwb2xpY3kgYWxtb3N0IGNlcnRhaW5seSBp
c24ndCBjb21wbGV0ZS4KQEAgLTE4NCw2ICsxODksMTkgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorU3VicmVzb3VyY2VMb2FkZXIqIENhY2hlZFJhd1Jlc291cmNlOjpsb2FkZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xvYWRlci5nZXQoKTsKK30KKwordm9pZCBDYWNoZWRSYXdSZXNvdXJj
ZTo6Y2xlYXIoKQoreworICAgIG1fZGF0YS5jbGVhcigpOworICAgIHNldEVuY29kZWRTaXplKDAp
OworICAgIGlmIChtX2xvYWRlcikKKyAgICAgICAgbV9sb2FkZXItPmNsZWFyUmVzb3VyY2VEYXRh
KCk7Cit9CisKIHZvaWQgQ2FjaGVkUmF3UmVzb3VyY2U6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJ
bmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDYWNo
ZWRSZXNvdXJjZVJhdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVk
UmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTMyNTAzKQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc5LDYgKzc5LDcgQEAKICAgICBDYWNoZWRSZXNvdXJjZUhhbmRsZTxDYWNoZWRTY3JpcHQ+
IHJlcXVlc3RTY3JpcHQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkRm9udD4gcmVxdWVzdEZvbnQoQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Jik7
CiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IHJlcXVlc3RSYXdS
ZXNvdXJjZShDYWNoZWRSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBDYWNoZWRSZXNvdXJjZUhhbmRs
ZTxDYWNoZWRSYXdSZXNvdXJjZT4gcmVxdWVzdE1haW5SZXNvdXJjZShDYWNoZWRSZXNvdXJjZVJl
cXVlc3QmKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgQ2FjaGVkUmVzb3VyY2VIYW5kbGU8Q2Fj
aGVkU1ZHRG9jdW1lbnQ+IHJlcXVlc3RTVkdEb2N1bWVudChDYWNoZWRSZXNvdXJjZVJlcXVlc3Qm
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
LmNwcAkocmV2aXNpb24gMTMyNTAzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMzUgKzYzLDM3IEBACiBzdGF0
aWMgUmVzb3VyY2VMb2FkUHJpb3JpdHkgZGVmYXVsdFByaW9yaXR5Rm9yUmVzb3VyY2VUeXBlKENh
Y2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6Ci0gICAgICAgICAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdoOwotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpT
Y3JpcHQ6Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkZvbnRSZXNvdXJjZToKLSAgICAg
ICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6Ci0gICAgICAgICAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW07Ci0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2U6Ci0gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlM
b3c7CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgICAgICByZXR1
cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5SGlnaDsKKyAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpDU1NTdHlsZVNoZWV0OgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlIaWdo
OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNjcmlwdDoKKyAgICBjYXNlIENhY2hlZFJlc291
cmNlOjpGb250UmVzb3VyY2U6CisgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6
CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eU1lZGl1bTsKKyAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2Fk
UHJpb3JpdHlMb3c7CiAjaWYgRU5BQkxFKFhTTFQpCi0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlhTTFN0eWxlU2hlZXQ6Ci0gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlIaWdoOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhTTFN0eWxlU2hlZXQ6CisgICAgICAg
IHJldHVybiBSZXNvdXJjZUxvYWRQcmlvcml0eUhpZ2g7CiAjZW5kaWYKICNpZiBFTkFCTEUoU1ZH
KQotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpTVkdEb2N1bWVudFJlc291cmNlOgotICAg
ICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5TG93OworICAgIGNhc2UgQ2FjaGVk
UmVzb3VyY2U6OlNWR0RvY3VtZW50UmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxv
YWRQcmlvcml0eUxvdzsKICNlbmRpZgogI2lmIEVOQUJMRShMSU5LX1BSRUZFVENIKQotICAgICAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpMaW5rUHJlZmV0Y2g6Ci0gICAgICAgICAgICByZXR1cm4g
UmVzb3VyY2VMb2FkUHJpb3JpdHlWZXJ5TG93OwotICAgICAgICBjYXNlIENhY2hlZFJlc291cmNl
OjpMaW5rU3VicmVzb3VyY2U6Ci0gICAgICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3Jp
dHlWZXJ5TG93OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKKyAgICAg
ICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9yaXR5VmVyeUxvdzsKKyAgICBjYXNlIENhY2hlZFJl
c291cmNlOjpMaW5rU3VicmVzb3VyY2U6CisgICAgICAgIHJldHVybiBSZXNvdXJjZUxvYWRQcmlv
cml0eVZlcnlMb3c7CiAjZW5kaWYKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgICAgIGNh
c2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRUcmFja1Jlc291cmNlOgotICAgICAgICAgICAgcmV0dXJu
IFJlc291cmNlTG9hZFByaW9yaXR5TG93OworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlRleHRU
cmFja1Jlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlMb3c7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgICAgIGNhc2UgQ2FjaGVkUmVzb3Vy
Y2U6OlNoYWRlclJlc291cmNlOgotICAgICAgICAgICAgcmV0dXJuIFJlc291cmNlTG9hZFByaW9y
aXR5TWVkaXVtOworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlNoYWRlclJlc291cmNlOgorICAg
ICAgICByZXR1cm4gUmVzb3VyY2VMb2FkUHJpb3JpdHlNZWRpdW07CiAjZW5kaWYKICAgICB9CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDIsNiArMTA0LDggQEAKIHN0YXRpYyBSZXNv
dXJjZVJlcXVlc3Q6OlRhcmdldFR5cGUgY2FjaGVkUmVzb3VyY2VUeXBlVG9UYXJnZXRUeXBlKENh
Y2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgorICAgICAgICByZXR1cm4gUmVzb3VyY2VS
ZXF1ZXN0OjpUYXJnZXRJc01haW5GcmFtZTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpDU1NT
dHlsZVNoZWV0OgogI2lmIEVOQUJMRShYU0xUKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OlhT
TFN0eWxlU2hlZXQ6CkBAIC0yNzcsOCArMjgxLDEwIEBACiAgICAgICAgIG1fcmVzb3VyY2VSZXF1
ZXN0LnNldEhUVFBIZWFkZXJGaWVsZCgiUHVycG9zZSIsICJwcmVmZXRjaCIpOwogI2VuZGlmCiAg
ICAgbV9yZXNvdXJjZVJlcXVlc3Quc2V0UHJpb3JpdHkobG9hZFByaW9yaXR5KCkpOwotICAgIGFk
ZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAKKyAgICBp
ZiAodHlwZSgpICE9IE1haW5SZXNvdXJjZSkKKyAgICAgICAgYWRkQWRkaXRpb25hbFJlcXVlc3RI
ZWFkZXJzKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKKwogI2lmIFVTRShQTEFURk9STV9TVFJBVEVH
SUVTKQogICAgIG1fbG9hZGVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5
KCktPnJlc291cmNlTG9hZFNjaGVkdWxlcigpLT5zY2hlZHVsZVN1YnJlc291cmNlTG9hZChjYWNo
ZWRSZXNvdXJjZUxvYWRlci0+ZnJhbWUoKSwgdGhpcywgbV9yZXNvdXJjZVJlcXVlc3QsIG1fcmVz
b3VyY2VSZXF1ZXN0LnByaW9yaXR5KCksIG9wdGlvbnMpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSYXdSZXNvdXJjZS5oCShyZXZpc2lvbiAx
MzI1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmF3UmVzb3VyY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksMTkgKzI5LDI1IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDYWNoZWRSYXdSZXNvdXJjZUNhbGxiYWNrOwogY2xhc3MgQ2FjaGVkUmF3UmVzb3Vy
Y2VDbGllbnQ7CitjbGFzcyBTdWJyZXNvdXJjZUxvYWRlcjsKIAogY2xhc3MgQ2FjaGVkUmF3UmVz
b3VyY2UgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2UgewogcHVibGljOgotICAgIENhY2hlZFJhd1Jl
c291cmNlKFJlc291cmNlUmVxdWVzdCYpOworICAgIENhY2hlZFJhd1Jlc291cmNlKFJlc291cmNl
UmVxdWVzdCYsIFR5cGUpOwogCiAgICAgLy8gRklYTUU6IEFzc29jaWF0ZWRVUkxMb2FkZXIgc2hv
dWxkbid0IGJlIGEgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyIGFuZCB0aGVyZWZvcmUgc2hvdWxk
bid0CiAgICAgLy8gdXNlIENhY2hlZFJhd1Jlc291cmNlLiBIb3dldmVyLCBpdCBpcywgYW5kIGl0
IG5lZWRzIHRvIGJlIGFibGUgdG8gZGVmZXIgbG9hZGluZy4KICAgICAvLyBUaGlzIGNhbiBiZSBm
aXhlZCBieSBzcGxpdHRpbmcgQ09SUyBwcmVmbGlnaHRpbmcgb3V0IG9mIERvY3VtZW50VGhyZWFj
YWJsZUxvYWRlci4KICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRCdWZmZXJEYXRhKERhdGFCdWZmZXJpbmdQb2xpY3kp
OwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBJbnBzZWN0b3JJ
bnN0cnVtZW50YXRpb24gZm9yIHByZWZsaWdodHMgaW4gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVy
LiBJdCdzIGFsc28gcmVhbGx5IGxhbWUuCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9pZGVudGlmaWVyOyB9CiAKKyAgICBTdWJyZXNvdXJjZUxvYWRlciog
bG9hZGVyKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhcigpOworCiAgICAgYm9vbCBjYW5SZXVzZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRN
ZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJREU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5j
cHAJKHJldmlzaW9uIDEzMjUwMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDggQEAKICAg
ICBjYXNlIENhY2hlZFJlc291cmNlOjpGb250UmVzb3VyY2U6CiAgICAgICAgIHJldHVybiBuZXcg
Q2FjaGVkRm9udChyZXF1ZXN0KTsKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpSYXdSZXNvdXJj
ZToKLSAgICAgICAgcmV0dXJuIG5ldyBDYWNoZWRSYXdSZXNvdXJjZShyZXF1ZXN0KTsKKyAgICBj
YXNlIENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2U6CisgICAgICAgIHJldHVybiBuZXcgQ2Fj
aGVkUmF3UmVzb3VyY2UocmVxdWVzdCwgdHlwZSk7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgY2Fz
ZSBDYWNoZWRSZXNvdXJjZTo6WFNMU3R5bGVTaGVldDoKICAgICAgICAgcmV0dXJuIG5ldyBDYWNo
ZWRYU0xTdHlsZVNoZWV0KHJlcXVlc3QpOwpAQCAtMjQ2LDYgKzI0NywxMSBAQAogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxDYWNoZWRSYXdSZXNvdXJjZSo+KHJlcXVlc3RSZXNvdXJjZShDYWNoZWRS
ZXNvdXJjZTo6UmF3UmVzb3VyY2UsIHJlcXVlc3QpLmdldCgpKTsKIH0KIAorQ2FjaGVkUmVzb3Vy
Y2VIYW5kbGU8Q2FjaGVkUmF3UmVzb3VyY2U+IENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0
TWFpblJlc291cmNlKENhY2hlZFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q2FjaGVkUmF3UmVzb3VyY2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2U6Ok1haW5SZXNvdXJjZSwgcmVxdWVzdCkuZ2V0KCkpOworfQorCiBib29sIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpjaGVja0luc2VjdXJlQ29udGVudChDYWNoZWRSZXNvdXJjZTo6VHlw
ZSB0eXBlLCBjb25zdCBLVVJMJiB1cmwpIGNvbnN0CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CkBA
IC0yODAsNiArMjg2LDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CisgICAg
Y2FzZSBDYWNoZWRSZXNvdXJjZTo6TWFpblJlc291cmNlOgogI2lmIEVOQUJMRShMSU5LX1BSRUZF
VENIKQogICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkxpbmtQcmVmZXRjaDoKICAgICBjYXNlIENh
Y2hlZFJlc291cmNlOjpMaW5rU3VicmVzb3VyY2U6CkBAIC0yOTIsMTEgKzI5OSw3IEBACiAKIGJv
b2wgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3QoQ2FjaGVkUmVzb3VyY2U6OlR5cGUg
dHlwZSwgY29uc3QgS1VSTCYgdXJsLCBib29sIGZvclByZWxvYWQpCiB7Ci0gICAgLy8gRklYTUU6
IFdoZW4gd2UgY2FuIGxvYWQgbWFpbiByZXNvdXJjZXMgdGhyb3VnaCBDYWNoZWRSZXNvdXJjZUxv
YWRlciwgd2UnbGwgbmVlZCB0byBhbGxvdyBmb3IgbnVsbCBkb2N1bWVudCgpIGhlcmUuCi0gICAg
aWYgKCFkb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkRpc3BsYXkodXJsKSkgeworICAgIGlmIChkb2N1
bWVudCgpICYmICFkb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5jYW5EaXNwbGF5KHVybCkp
IHsKICAgICAgICAgaWYgKCFmb3JQcmVsb2FkKQogICAgICAgICAgICAgRnJhbWVMb2FkZXI6OnJl
cG9ydExvY2FsTG9hZEZhaWxlZChkb2N1bWVudCgpLT5mcmFtZSgpLCB1cmwuc3RyaW5nKCkpOwog
ICAgICAgICBMT0coUmVzb3VyY2VMb2FkaW5nLCAiQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
c3RSZXNvdXJjZSBVUkwgd2FzIG5vdCBhbGxvd2VkIGJ5IFNlY3VyaXR5T3JpZ2luOjpjYW5EaXNw
bGF5Iik7CkBAIC0zMDcsNiArMzEwLDcgQEAKICAgICAvLyB0eXBlcyBvZiByZXNvdXJjZXMsIGxp
a2UgSW1hZ2VzLCBTY3JpcHRzLCBhbmQgQ1NTLCBjYW4gYmUgbG9hZGVkIGZyb20KICAgICAvLyBh
bnkgVVJMLgogICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ2FjaGVkUmVzb3VyY2U6Ok1h
aW5SZXNvdXJjZToKICAgICBjYXNlIENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlOgogICAg
IGNhc2UgQ2FjaGVkUmVzb3VyY2U6OkNTU1N0eWxlU2hlZXQ6CiAgICAgY2FzZSBDYWNoZWRSZXNv
dXJjZTo6U2NyaXB0OgpAQCAtMzc0LDYgKzM3OCw3IEBACiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIENhY2hlZFJlc291cmNlOjpNYWlu
UmVzb3VyY2U6CiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6UmF3UmVzb3VyY2U6CiAjaWYgRU5B
QkxFKExJTktfUFJFRkVUQ0gpCiAgICAgY2FzZSBDYWNoZWRSZXNvdXJjZTo6TGlua1ByZWZldGNo
OgpAQCAtNTE4LDggKzUyMywxMSBAQAogICAgICAgICByZXR1cm4gUmVsb2FkOwogICAgIH0KIAor
ICAgIGlmIChleGlzdGluZ1Jlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5S
ZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIFJlbG9hZDsKKwogICAgIGlmIChleGlzdGluZ1Jlc291
cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OlJhd1Jlc291cmNlICYmICFzdGF0aWNfY2Fz
dDxDYWNoZWRSYXdSZXNvdXJjZSo+KGV4aXN0aW5nUmVzb3VyY2UpLT5jYW5SZXVzZShyZXF1ZXN0
KSkKLSAgICAgICAgIHJldHVybiBSZWxvYWQ7CisgICAgICAgIHJldHVybiBSZWxvYWQ7CiAKICAg
ICAvLyBDZXJ0YWluIHJlcXVlc3RzIChlLmcuLCBYSFJzKSBtaWdodCBoYXZlIG1hbnVhbGx5IHNl
dCBoZWFkZXJzIHRoYXQgcmVxdWlyZSByZXZhbGlkYXRpb24uCiAgICAgLy8gRklYTUU6IEluIHRo
ZW9yeSwgdGhpcyBzaG91bGQgYmUgYSBSZXZhbGlkYXRlIGNhc2UuIEluIHByYWN0aWNlLCB0aGUg
TWVtb3J5Q2FjaGUgcmV2YWxpZGF0aW9uIHBhdGggYXNzdW1lcyBhIHdob2xlIGJ1bmNoCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkocmV2aXNp
b24gMTMyNTAzKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKICAgICAKIHB1YmxpYzoKICAgICBl
bnVtIFR5cGUgeworICAgICAgICBNYWluUmVzb3VyY2UsCiAgICAgICAgIEltYWdlUmVzb3VyY2Us
CiAgICAgICAgIENTU1N0eWxlU2hlZXQsCiAgICAgICAgIFNjcmlwdCwKQEAgLTEwNCw2ICsxMDUs
OSBAQAogICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8UmVzb3VyY2VCdWZmZXI+IGRh
dGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKTsKICAgICB2aXJ0dWFsIHZvaWQgZXJyb3IoQ2FjaGVk
UmVzb3VyY2U6OlN0YXR1cyk7CiAKKyAgICB2b2lkIHNldFJlc291cmNlRXJyb3IoY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IpIHsgbV9lcnJvciA9IGVycm9yOyB9CisgICAgY29uc3QgUmVzb3Vy
Y2VFcnJvciYgcmVzb3VyY2VFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKwogICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRJZ25vcmVIVFRQU3RhdHVzQ29kZUVycm9ycygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKICAgICBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCgp
IHsgcmV0dXJuIG1fcmVzb3VyY2VSZXF1ZXN0OyB9CkBAIC0xNTIsNyArMTU2LDcgQEAKICAgICB2
aXJ0dWFsIGJvb2wgaXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBp
Z25vcmVGb3JSZXF1ZXN0Q291bnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
CisgICAgICAgIHJldHVybiB0eXBlKCkgPT0gTWFpblJlc291cmNlCiAjaWYgRU5BQkxFKExJTktf
UFJFRkVUQ0gpCiAgICAgICAgICAgICB8fCB0eXBlKCkgPT0gTGlua1ByZWZldGNoCiAgICAgICAg
ICAgICB8fCB0eXBlKCkgPT0gTGlua1N1YnJlc291cmNlCkBAIC0yNTcsOCArMjYxLDYgQEAKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tOb3RpZnkoKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBhZGRBZGRpdGlvbmFsUmVxdWVzdEhlYWRlcnMoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsK
LQogICAgIHZvaWQgc2V0RW5jb2RlZFNpemUodW5zaWduZWQpOwogICAgIHZvaWQgc2V0RGVjb2Rl
ZFNpemUodW5zaWduZWQpOwogICAgIHZvaWQgZGlkQWNjZXNzRGVjb2RlZERhdGEoZG91YmxlIHRp
bWVTdGFtcCk7CkBAIC0zMDUsMTAgKzMwNywxMyBAQAogICAgIGRvdWJsZSBjdXJyZW50QWdlKCkg
Y29uc3Q7CiAgICAgZG91YmxlIGZyZXNobmVzc0xpZmV0aW1lKCkgY29uc3Q7CiAKKyAgICB2b2lk
IGFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyhDYWNoZWRSZXNvdXJjZUxvYWRlciopOwogICAg
IHZvaWQgZmFpbEJlZm9yZVN0YXJ0aW5nKCk7CiAKICAgICBSZWZQdHI8Q2FjaGVkTWV0YWRhdGE+
IG1fY2FjaGVkTWV0YWRhdGE7CiAKKyAgICBSZXNvdXJjZUVycm9yIG1fZXJyb3I7CisKICAgICBk
b3VibGUgbV9sYXN0RGVjb2RlZEFjY2Vzc1RpbWU7IC8vIFVzZWQgYXMgYSAidGhyYXNoIGd1YXJk
IiBpbiB0aGUgY2FjaGUKICAgICBkb3VibGUgbV9sb2FkRmluaXNoVGltZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxMzI1
MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDggQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVz
b3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChuZXdSZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNl
KTsKKyAgICBpZiAobmV3UmVxdWVzdC5pc051bGwoKSkKKyAgICAgICAgY2FuY2VsKCk7CiB9CiAK
IHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFNlbmREYXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBi
eXRlc1NlbnQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbEJ5dGVzVG9CZVNlbnQpCkBAIC0xODMs
NyArMTg1LDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UocmVzcG9uc2UpOwogCi0gICAgaWYgKHJlc3BvbnNlLmlzTXVsdGlwYXJ0KCkp
IHsKKyAgICAvLyBGSVhNRTogTWFpbiByZXNvdXJjZXMgaGF2ZSBhIGRpZmZlcmVudCBzZXQgb2Yg
cnVsZXMgZm9yIG11bHRpcGFydCB0aGFuIGltYWdlcyBkby4KKyAgICAvLyBIb3BlZnVsbHkgd2Ug
Y2FuIG1lcmdlIHRob3NlIDIgcGF0aHMuCisgICAgaWYgKHJlc3BvbnNlLmlzTXVsdGlwYXJ0KCkg
JiYgbV9yZXNvdXJjZS0+dHlwZSgpICE9IENhY2hlZFJlc291cmNlOjpNYWluUmVzb3VyY2UpIHsK
ICAgICAgICAgbV9sb2FkaW5nTXVsdGlwYXJ0Q29udGVudCA9IHRydWU7CiAKICAgICAgICAgLy8g
V2UgZG9uJ3QgY291bnQgbXVsdGlQYXJ0cyBpbiBhIENhY2hlZFJlc291cmNlTG9hZGVyJ3MgcmVx
dWVzdCBjb3VudApAQCAtMjg0LDYgKzI4OCw3IEBACiAgICAgUmVmUHRyPFN1YnJlc291cmNlTG9h
ZGVyPiBwcm90ZWN0KHRoaXMpOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291
cmNlPiBwcm90ZWN0UmVzb3VyY2UobV9yZXNvdXJjZSk7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGlu
ZzsKKyAgICBtX3Jlc291cmNlLT5zZXRSZXNvdXJjZUVycm9yKGVycm9yKTsKICAgICBpZiAoZXJy
b3IuaXNUaW1lb3V0KCkpCiAgICAgICAgIG1fcmVzb3VyY2UtPmVycm9yKENhY2hlZFJlc291cmNl
OjpUaW1lb3V0RXJyb3IpOwogICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjUw
MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDUyIEBACisyMDEyLTEwLTE5ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgQWRkIGEgbWFpbiByZXNvdXJjZSB0eXBlIHRvIHRoZSBtZW1vcnkgY2FjaGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODY0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFzVGV4dENvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUpOgor
ICAgICAgICAqIGxvYWRlci9TdWJyZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdWJyZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3VicmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRSYXdSZXNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSYXdSZXNvdXJj
ZTo6Q2FjaGVkUmF3UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3Vy
Y2U6OmFkZEFkZGl0aW9uYWxSZXF1ZXN0SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpzZXRTaG91bGRCdWZmZXJEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJhd1Jlc291cmNlOjpsb2FkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkUmF3UmVzb3VyY2U6OmNsZWFyKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkUmF3UmVzb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ2Fj
aGVkUmF3UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0UHJpb3JpdHlGb3JSZXNvdXJjZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y2FjaGVkUmVzb3VyY2VUeXBlVG9UYXJnZXRUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlOjp1cGRhdGVSZXNvdXJjZVJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlLmg6
CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6c2V0UmVzb3VyY2VFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6cmVzb3VyY2VFcnJvcik6CisgICAgICAg
IChDYWNoZWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZTo6aWdu
b3JlRm9yUmVxdWVzdENvdW50KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RSYXdSZXNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6Y2hlY2tJbnNlY3VyZUNvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmNhblJlcXVlc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OmRldGVybWluZVJldmFs
aWRhdGlvblBvbGljeSk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9h
ZGVyLmg6CisgICAgICAgIChDYWNoZWRSZXNvdXJjZUxvYWRlcik6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUxvYWRQcmlvcml0eS5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvUmVz
b3VyY2VMb2FkUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9IVFRQUGlwZWxpbmluZ1By
aW9yaXR5KToKKwogMjAxMi0xMC0yNSAgRWxsaW90dCBTcHJlaG4gIDxlc3ByZWhuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBFdmVyeXRoaW5nIHRoYXQgc2V0cyBSZW5kZXJPYmplY3Q6Om1fc3R5
bGUgc2hvdWxkIGdvIHRocm91Z2ggc2V0U3R5bGVJbnRlcm5hbAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>