<?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>48425</bug_id>
          
          <creation_ts>2010-10-27 06:27:22 -0700</creation_ts>
          <short_desc>Clean up IDBTransactionBackend/Coordinator</short_desc>
          <delta_ts>2010-11-05 07:01:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jeremy Orlow">jorlow</reporter>
          <assigned_to name="Jeremy Orlow">jorlow</assigned_to>
          <cc>andreip</cc>
    
    <cc>hans</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>300173</commentid>
    <comment_count>0</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-27 06:27:22 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300177</commentid>
    <comment_count>1</comment_count>
      <attachid>72027</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-27 06:45:39 -0700</bug_when>
    <thetext>Created attachment 72027
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300196</commentid>
    <comment_count>2</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-27 07:10:17 -0700</bug_when>
    <thetext>&gt;IDBTransactionBackendImpl::~IDBTransactionBackendImpl()
&gt; {
&gt;    abort();

Now that the coordinator doesn&apos;t keep a ref to the transaction backends, are we guaranteed to work as expected in the following scenario:

db.transaction().objectStore(&quot;foo&quot;).put(...);
window.gc();

If the transaction frontend object gets destroyed, it will unref it&apos;s backend object, which may abort the transaction before it&apos;s got the chance to do the work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300237</commentid>
    <comment_count>3</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-27 08:25:36 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt;IDBTransactionBackendImpl::~IDBTransactionBackendImpl()
&gt; &gt; {
&gt; &gt;    abort();
&gt; 
&gt; Now that the coordinator doesn&apos;t keep a ref to the transaction backends, are we guaranteed to work as expected in the following scenario:
&gt; 
&gt; db.transaction().objectStore(&quot;foo&quot;).put(...);
&gt; window.gc();
&gt; 
&gt; If the transaction frontend object gets destroyed, it will unref it&apos;s backend object, which may abort the transaction before it&apos;s got the chance to do the work?

You&apos;re right.  Actually, I think this largely isn&apos;t a problem as currently written.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300262</commentid>
    <comment_count>4</comment_count>
      <attachid>72041</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-27 09:00:22 -0700</bug_when>
    <thetext>Created attachment 72041
a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300272</commentid>
    <comment_count>5</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2010-10-27 09:11:38 -0700</bug_when>
    <thetext>LGTM

&gt; PassRefPtr&lt;IDBTransactionCoordinator&gt; IDBTransactionCoordinator::create()
&gt; {
&gt;    return adoptRef(new IDBTransactionCoordinator());
&gt; }

Why is this in the cpp now?

&gt; m_transactions.add(transaction, transaction);

Heh :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300277</commentid>
    <comment_count>6</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-10-27 09:23:41 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; LGTM
&gt; 
&gt; &gt; PassRefPtr&lt;IDBTransactionCoordinator&gt; IDBTransactionCoordinator::create()
&gt; &gt; {
&gt; &gt;    return adoptRef(new IDBTransactionCoordinator());
&gt; &gt; }
&gt; 
&gt; Why is this in the cpp now?

We do it both ways.  More often we do it in the .h, but I really think it&apos;s cleaner to do it in the cpp files.  My intention is to do it this way throughout.
 
&gt; &gt; m_transactions.add(transaction, transaction);
&gt; 
&gt; Heh :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302812</commentid>
    <comment_count>7</comment_count>
      <attachid>72041</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-11-01 11:39:23 -0700</bug_when>
    <thetext>Comment on attachment 72041
a

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

&gt; WebCore/storage/IDBTransactionCoordinator.h:63
&gt; +    HashMap&lt;IDBTransactionBackendImpl*, RefPtr&lt;IDBTransactionBackendImpl&gt; &gt; m_transactions;

Using a map like this seems a little odd. Can&apos;t you just use a HashSet? If required, you could provide a custom HashFunctions to make sure the value of the raw pointer is used when looking up a value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303301</commentid>
    <comment_count>8</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-02 04:22:10 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 72041 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72041&amp;action=review
&gt; 
&gt; &gt; WebCore/storage/IDBTransactionCoordinator.h:63
&gt; &gt; +    HashMap&lt;IDBTransactionBackendImpl*, RefPtr&lt;IDBTransactionBackendImpl&gt; &gt; m_transactions;
&gt; 
&gt; Using a map like this seems a little odd. Can&apos;t you just use a HashSet? If required, you could provide a custom HashFunctions to make sure the value of the raw pointer is used when looking up a value.

I&apos;m pretty sure I&apos;d have to create some custom version that handles the keys being ref pointers.  Is it really worth the effort to do this?  Does it really make it that much more clean?  Maybe just a fixme is enough so the tradeoff is documented?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303331</commentid>
    <comment_count>9</comment_count>
      <attachid>72041</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-11-02 06:15:58 -0700</bug_when>
    <thetext>Comment on attachment 72041
a

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

&gt;&gt;&gt; WebCore/storage/IDBTransactionCoordinator.h:63
&gt;&gt;&gt; +    HashMap&lt;IDBTransactionBackendImpl*, RefPtr&lt;IDBTransactionBackendImpl&gt; &gt; m_transactions;
&gt;&gt; 
&gt;&gt; Using a map like this seems a little odd. Can&apos;t you just use a HashSet? If required, you could provide a custom HashFunctions to make sure the value of the raw pointer is used when looking up a value.
&gt; 
&gt; I&apos;m pretty sure I&apos;d have to create some custom version that handles the keys being ref pointers.  Is it really worth the effort to do this?  Does it really make it that much more clean?  Maybe just a fixme is enough so the tradeoff is documented?

Sure, I guess a FIXME is OK. I think it&apos;s worth a quick try though - I didn&apos;t read through all of HashSet, but I think it might just work with RefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305252</commentid>
    <comment_count>10</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-11-05 07:01:56 -0700</bug_when>
    <thetext>Committed r71412: &lt;http://trac.webkit.org/changeset/71412&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72027</attachid>
            <date>2010-10-27 06:45:39 -0700</date>
            <delta_ts>2010-10-27 09:00:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>18290</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mzc2ZTg5My4uZTIzZGZjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0MyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIENsZWFuIHVwIElEQlRyYW5zYWN0aW9uQmFja2VuZC9D
b29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDg0MjUKKworICAgICAgICBHZXQgcmlkIG9mIG9ic29sZXRlIGlkIGFuZCB0aHVzIHdlIGRv
bid0IG5lZWQgdGhlIGZhY3RvcnkgbWV0aG9kCisgICAgICAgIG9uIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IgdGhhdCBjcmVhdGVzIElEQlRyYW5zYWN0aW9uQmFja2VuZHMuCisKKyAgICAgICAg
QWRkIGFuIGFzc2VydCB0byBJREJUcmFuc2FjdGlvbkJhY2tlbmQgdG8gbWFrZSBzdXJlIHdlJ3Jl
IG5vdCBpbgorICAgICAgICB0aGUgY29vcmRpbmF0b3IgYW5kIHRoZW4gcmVtb3ZlIHRoZSBjb29y
ZGluYXRvcnMgcmVmIGNvdW50aW5nIGxpbmsKKyAgICAgICAgdG8gdGhlIHRyYW5zYWN0aW9uLgor
CisgICAgICAgIEhhdmUgdGhlIHRyYW5zYWN0aW9uIGJhY2tlbmQgemVybyBvdXQgcmVmcyB0byB0
aGUgZGF0YWJhc2Ugd2hlbiBpdHMKKyAgICAgICAgZG9uZSB1c2luZyBpdC4KKworICAgICAgICBF
eGlzdGluZyB0ZXN0cyBwcm92aWRlIGNvdmVyYWdlIGZvciB0aGlzIHJlZmFjdG9yaW5nLgorCisg
ICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
cHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMpOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oOgorCisyMDEwLTEwLTI3ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAg
ICAgICAgIElEQkZhY3RvcnlCYWNrZW5kJ3MgcmVmZXJlbmNlIHRvIElEQkRhdGFiYXNlQmFja2Vu
ZCBzaG91bGQgYmUgd2VhawogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg0MTYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCmluZGV4IDE1NmEyMWQuLjAwNGRjN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAj
aW5jbHVkZSAiSURCU1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCkBAIC0yMjQsNyAr
MjI0LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0
U3RvcmVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0
b3ItPmNyZWF0ZVRyYW5zYWN0aW9uKG9iamVjdFN0b3Jlcy5nZXQoKSwgSURCVHJhbnNhY3Rpb246
OlZFUlNJT05fQ0hBTkdFLCAwLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNy
ZWF0ZShvYmplY3RTdG9yZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwg
MCwgdGhpcyk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsLCBkYXRh
YmFzZSwgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKSkpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwpAQCAtMjQ3LDcgKzI0Nyw3
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmCiBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3Ry
aW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25n
IHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90IGFs
bG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KLSAgICByZXR1cm4gbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLT5jcmVhdGVUcmFuc2FjdGlvbihvYmplY3RTdG9yZXMsIG1vZGUsIHRp
bWVvdXQsIHRoaXMpOworICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVh
dGUob2JqZWN0U3RvcmVzLCBtb2RlLCB0aW1lb3V0LCB0aGlzKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAKaW5kZXggMmIxZjczMi4uN2RhYjE1NCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMzQsMTYgKzM0LDE1IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoRE9NU3RyaW5nTGlzdCog
b2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQs
IGludCBpZCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCitQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0
ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2ln
bmVkIGxvbmcgdGltZW91dCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0
b3JlcywgbW9kZSwgdGltZW91dCwgaWQsIGRhdGFiYXNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3JlcywgbW9kZSwgdGltZW91
dCwgZGF0YWJhc2UpKTsKIH0KIAotSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGlkLCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiBkYXRhYmFzZSkKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9y
dCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRh
dGFiYXNlKQogICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKICAgICAsIG1f
bW9kZShtb2RlKQogICAgICwgbV90aW1lb3V0KHRpbWVvdXQpIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGltZW91dC4KLSAgICAsIG1faWQoaWQpCiAgICAgLCBtX3N0YXRlKFVudXNlZCkKICAgICAsIG1f
ZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgLCBtX3RyYW5zYWN0aW9uKG5ldyBTUUxpdGVUcmFuc2Fj
dGlvbihkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSkpCkBAIC01Myw2ICs1MiwxNCBAQCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmlu
Z0xpc3QqIG9iamVjdFN0b3JlcwogewogfQogCitJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpCit7CisgICAgYWJvcnQoKTsKKworICAgIC8vIFdv
cnRoIGRvdWJsZSBjaGVja2luZyBzaW5jZSB0aGUgY29vcmRpbmF0b3Iga2VlcHMgcmF3IHBvaW50
ZXJzIHRvIHVzLgorICAgIEFTU0VSVCghbV9kYXRhYmFzZSB8fCAhbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7Cit9CisKIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpv
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmlu
aXNoZWQpCkBAIC05NCw2ICsxMDEsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6
OmFib3J0KCkKIAogICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KCk7CiAgICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAg
ICBBU1NFUlQoIW1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+aXNBY3RpdmUo
dGhpcykpOworICAgIGJyZWFrRGF0YWJhc2VSZWYoKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsOjpkaWRDb21wbGV0ZVRhc2tFdmVudHMoKQpAQCAtMTMzLDYgKzE0Miw3IEBA
IHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICBtX3RyYW5zYWN0
aW9uLT5jb21taXQoKTsKICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0ZSgpOwogICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhp
cyk7CisgICAgYnJlYWtEYXRhYmFzZVJlZigpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OnRhc2tUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KikKQEAgLTE3Myw2ICsxODMsMTYgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp0
YXNrRXZlbnRUaW1lckZpcmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEkKICAgICAgICAg
bV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwogfQogCit2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGw6OmJyZWFrRGF0YWJhc2VSZWYoKQoreworICAgIGlmICghbV9kYXRhYmFzZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gV29ydGggZG91YmxlIGNoZWNraW5nIHNpbmNlIHRoZSBj
b29yZGluYXRvciBrZWVwcyByYXcgcG9pbnRlcnMgdG8gdXMuCisgICAgQVNTRVJUKCFtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAgICBtX2Rh
dGFiYXNlID0gMDsKK30KKwogfTsKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwu
aCBiL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggNWY3
NDA5Yi4uODMwYWIwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5oCkBAIC00MiwyMSArNDIsMjAgQEAgY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsK
IAogY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGlkLCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsKik7Ci0gICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCgpIHsgYWJvcnQoKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw+IGNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVk
IHNob3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCopOworICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsKIAogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0
b3JlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBtb2Rl
KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlOyB9CiAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFz
ayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7
Ci0gICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldENhbGxiYWNrcyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7
IG1fY2FsbGJhY2tzID0gY2FsbGJhY2tzOyB9CiAKICAgICB2b2lkIHJ1bigpOwogCiBwcml2YXRl
OgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3Rv
cmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBpZCwg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwo
RE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25l
ZCBsb25nIHRpbWVvdXQsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqKTsKIAogICAgIGVudW0gU3Rh
dGUgewogICAgICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCkBAIC03
MSwxMCArNzAsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRhc2tUaW1lckZpcmVkKFRpbWVyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CiAgICAgdm9pZCB0YXNrRXZlbnRUaW1lckZpcmVk
KFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+Kik7CiAKKyAgICB2b2lkIGJyZWFrRGF0
YWJhc2VSZWYoKTsKKwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBtX29iamVjdFN0b3JlTmFt
ZXM7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9tb2RlOwogICAgIHVuc2lnbmVkIGxvbmcgbV90aW1l
b3V0OwotICAgIGludCBtX2lkOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25DYWxsYmFja3M+IG1fY2FsbGJhY2tzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9z
dG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGIvV2ViQ29yZS9zdG9yYWdl
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCmluZGV4IDY1YjA5N2QuLjgwMTM1ZjAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UuaAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
LmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRh
c2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNrLCBQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzayA9IDApID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBhYm9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKikgPSAwOwog
fTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCmlu
ZGV4IDBlY2UzMDkuLjRiZDU2OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigp
IAotICAgIDogbV9uZXh0SUQoMCkKIHsKIH0KIApAQCAtNDUsNDEgKzQ0LDQxIEBAIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6On5JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkKIHsKIH0KIAot
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OmNyZWF0ZVRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3Jl
cywgdW5zaWduZWQgc2hvcnQgbW9kZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsKiBkYXRhYmFzZSkKLXsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
b2JqZWN0U3RvcmVzLCBtb2RlLCB0aW1lb3V0LCArK21fbmV4dElELCBkYXRhYmFzZSk7Ci0gICAg
bV90cmFuc2FjdGlvbnMuYWRkKG1fbmV4dElELCB0cmFuc2FjdGlvbik7Ci0gICAgcmV0dXJuIHRy
YW5zYWN0aW9uLnJlbGVhc2UoKTsKLX0KLQogdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqIHRyYW5zYWN0
aW9uKQogewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi0+
aWQoKSkpOwotCiAgICAgbV9zdGFydGVkVHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7CiAg
ICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yOjpkaWRGaW5pc2hUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb24tPmlkKCkpKTsKLQogICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29u
dGFpbnModHJhbnNhY3Rpb24pKSB7CiAgICAgICAgIEFTU0VSVCghbV9ydW5uaW5nVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CiAgICAgICAgIG1fc3RhcnRlZFRyYW5zYWN0aW9u
cy5yZW1vdmUodHJhbnNhY3Rpb24pOwogICAgIH0gZWxzZSBpZiAobV9ydW5uaW5nVHJhbnNhY3Rp
b25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKICAgICAgICAgbV9ydW5uaW5nVHJhbnNhY3Rpb25z
LnJlbW92ZSh0cmFuc2FjdGlvbik7CiAKLSAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNh
Y3Rpb24tPmlkKCkpOwotCiAgICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKIH0KIAor
I2lmbmRlZiBOREVCVUcKK2Jvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6aXNBY3RpdmUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChtX3J1bm5pbmdUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24p
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwog
dm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9u
cygpCiB7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsbG9jYXRlIGEgdGhyZWFkIHRvIHRo
ZSBuZXh0IHRyYW5zYWN0aW9uIHRoYXQncwotICAgIC8vIHJlYWR5IHRvIHJ1bi4gRm9yIG5vdyB3
ZSBvbmx5IGhhdmUgYSBzaW5nbGUgcnVubmluZyB0cmFuc2FjdGlvbi4KLSAgICBpZiAobV9zdGFy
dGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSB8fCAhbV9ydW5uaW5nVHJhbnNhY3Rpb25zLmlzRW1w
dHkoKSkKKyAgICAvLyBGSVhNRTogRm9yIG5vdywgd2Ugb25seSBhbGxvdyBvbmUgdHJhbnNhY3Rp
b24gdG8gcnVuIGF0IGEgdGltZS4KKyAgICBpZiAoIW1fcnVubmluZ1RyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsKiB0cmFuc2FjdGlvbiA9ICptX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggYi9XZWJD
b3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCmluZGV4IGZkZGIwMDMuLmVk
NmNkYmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgKKysrIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaApA
QCAtMzksMzkgKzM5LDI4IEBAIGNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw7CiBjbGFz
cyBJREJUcmFuc2FjdGlvbkNhbGxiYWNrczsKIGNsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw7
CiAKLS8vIFRoaXMgY2xhc3MgbWFuYWdlcyB0cmFuc2FjdGlvbnMgYXMgZm9sbG93cy4gUmVxdWVz
dHMgZm9yIG5ldyB0cmFuc2FjdGlvbnMgYXJlCi0vLyBhbHdheXMgc2F0aXNmaWVkIGFuZCB0aGUg
bmV3IHRyYW5zYWN0aW9uIGlzIHBsYWNlZCBpbiBhIHF1ZXVlLgotLy8gVHJhbnNhY3Rpb25zIGFy
ZSBub3QgYWN0dWFsbHkgc3RhcnRlZCB1bnRpbCB0aGUgZmlyc3Qgb3BlcmF0aW9uIGlzIGlzc3Vl
ZC4KLS8vIEVhY2ggdHJhbnNhY3Rpb24gZXhlY3V0ZXMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgYW5k
IGlzIGNvbW1pdHRlZCBhdXRvbWF0aWNhbGx5Ci0vLyB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG9w
ZXJhdGlvbnMgaXNzdWVkIGluIGl0cyBjb250ZXh0LgotLy8gV2hlbiBzdGFydGluZywgYSB0cmFu
c2FjdGlvbiB3aWxsIGF0dGVtcHQgdG8gbG9jayBhbGwgdGhlIG9iamVjdCBzdG9yZXMgaW4gaXRz
Ci0vLyBzY29wZS4gSWYgdGhpcyBkb2VzIG5vdCBoYXBwZW4gd2l0aGluIGEgZ2l2ZW4gdGltZW91
dCwgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KLS8vIFRoZSBDb29yZGluYXRvciBtYWludGFpbnMg
YSBwb29sIG9mIHRocmVhZHMuIElmIHRoZXJlIGFyZSBubyB0aHJlYWRzIGF2YWlsYWJsZQotLy8g
dGhlIG5leHQgdHJhbnNhY3Rpb24gaW4gdGhlIHF1ZXVlIHdpbGwgaGF2ZSB0byB3YWl0IHVudGls
IGEgdGhyZWFkIGJlY29tZXMKLS8vIGF2YWlsYWJsZS4KIC8vIFRyYW5zYWN0aW9ucyBhcmUgZXhl
Y3V0ZWQgaW4gdGhlIG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCiBjbGFzcyBJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8SURCVHJhbnNhY3Rpb25Db29yZGluYXRv
cj4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCkpOyB9CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOwog
Ci0gICAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZVRy
YW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlcywgdW5zaWduZWQgc2hvcnQgbW9k
ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKik7Ci0KICAg
ICAvLyBDYWxsZWQgYnkgdHJhbnNhY3Rpb25zIGFzIHRoZXkgc3RhcnQgYW5kIGZpbmlzaC4KICAg
ICB2b2lkIGRpZFN0YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCopOwog
ICAgIHZvaWQgZGlkRmluaXNoVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCop
OwogCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgaXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbCopOworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpOwogCiAgICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwogCi0gICAg
Ly8gVGhpcyBtYXAgb3ducyBhbGwgdHJhbnNhY3Rpb25zIGtub3duIHRvIHRoZSBjb29yZGluYXRv
ci4KLSAgICBIYXNoTWFwPGludCwgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+ID4g
bV90cmFuc2FjdGlvbnM7CiAgICAgLy8gVHJhbnNhY3Rpb25zIGluIGRpZmZlcmVudCBzdGF0ZXMg
YXJlIGdyb3VwZWQgYmVsb3cuCiAgICAgTGlzdEhhc2hTZXQ8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbCo+IG1fc3RhcnRlZFRyYW5zYWN0aW9uczsKICAgICBIYXNoU2V0PElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwqPiBtX3J1bm5pbmdUcmFuc2FjdGlvbnM7Ci0gICAgaW50IG1fbmV4dElEOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTA1N2U2MC4uN2Jh
YWU5NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMTAtMjcgIEplcmVteSBP
cmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgSURCVHJhbnNhY3Rpb25CYWNrZW5kL0Nvb3Jk
aW5hdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
ODQyNQorCisgICAgICAgIFJlbW92ZSBvYnNvbGV0ZSA6OmlkKCkgbWV0aG9kLgorCisgICAgICAg
ICogcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmg6CisgICAgICAgICogc3JjL0lEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKiBzcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcDoKKyAgICAg
ICAgKiBzcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmg6CisKIDIwMTAtMTAtMjYgIFZpY3Rvcmlh
IEtpcnN0ICA8dnJrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9u
LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKaW5kZXggMzg1
ZGQxZS4uY2ZmN2M2NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJU
cmFuc2FjdGlvbi5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rp
b24uaApAQCAtNTIsMTEgKzUyLDYgQEAgcHVibGljOgogICAgIH0KICAgICB2aXJ0dWFsIHZvaWQg
YWJvcnQoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQotICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFdFQktJVF9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRDYWxsYmFja3MoV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKSB7IFdFQktJVF9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiAgICAgLy8gRklYTUU6IHRoaXMgaXMgbmV2ZXIgY2Fs
bGVkIGZyb20gV2ViQ29yZS4gRmluZCBhIGNsZWFuZXIgc29sdXRpb24uCmRpZmYgLS1naXQgYS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuY3BwCmluZGV4IDRiMTll
ZTQuLjdhODhiMTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHkuY3BwCkBAIC04NCwxMSArODQsNiBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5OjpkaWRDb21wbGV0ZVRhc2tFdmVudHMoKQogICAgIG1fd2ViSURCVHJhbnNh
Y3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCi1pbnQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHk6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93ZWJJREJUcmFuc2FjdGlv
bi0+aWQoKTsKLX0KLQogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6c2V0Q2FsbGJh
Y2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKiBjYWxsYmFja3MpCiB7CiAgICAgbV93ZWJJREJU
cmFuc2FjdGlvbi0+c2V0Q2FsbGJhY2tzKG5ldyBXZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrc0lt
cGwoY2FsbGJhY2tzKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5z
YWN0aW9uQmFja2VuZFByb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5LmgKaW5kZXggMGM1NmYxOS4uMGJmODRkYSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkuaApAQCAtNDcsNyArNDcsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVhbCBib29sIHNj
aGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+LCBQYXNz
T3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7Ci0gICAgdmlydHVhbCBpbnQgaWQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzKik7CiAK
ICAgICBXZWJLaXQ6OldlYklEQlRyYW5zYWN0aW9uKiBnZXRXZWJJREJUcmFuc2FjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViSURCVHJhbnNhY3Rpb24uZ2V0KCk7IH0KZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcAppbmRleCBmNWQ4NzQ4Li40MzA3Y2I1
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5j
cHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCkBA
IC02OSwxMSArNjksNiBAQCB2b2lkIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6ZGlkQ29tcGxldGVU
YXNrRXZlbnRzKCkKICAgICBtX2JhY2tlbmQtPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQog
Ci1pbnQgV2ViSURCVHJhbnNhY3Rpb25JbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
YmFja2VuZC0+aWQoKTsKLX0KLQogdm9pZCBXZWJJREJUcmFuc2FjdGlvbkltcGw6OnNldENhbGxi
YWNrcyhXZWJJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKQogewogICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkNhbGxiYWNrcz4gaWRiQ2FsbGJhY2tzID0gSURCVHJhbnNhY3Rpb25D
YWxsYmFja3NQcm94eTo6Y3JlYXRlKGNhbGxiYWNrcyk7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCAyNGJhYjkxLi5iMjZiM2FjIDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTQ1LDcgKzQ1LDYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7CiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotICAgIHZpcnR1YWwgaW50IGlkKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhXZWJJREJUcmFuc2FjdGlvbkNhbGxi
YWNrcyopOwogCiAgICAgdmlydHVhbCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIGdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72041</attachid>
            <date>2010-10-27 09:00:22 -0700</date>
            <delta_ts>2010-11-02 06:15:58 -0700</delta_ts>
            <desc>a</desc>
            <filename>a</filename>
            <type>text/plain</type>
            <size>18882</size>
            <attacher name="Jeremy Orlow">jorlow</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Mzc2ZTg5My4uZTIzZGZjZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw0MyBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgIENsZWFuIHVwIElEQlRyYW5zYWN0aW9uQmFja2VuZC9D
b29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDg0MjUKKworICAgICAgICBHZXQgcmlkIG9mIG9ic29sZXRlIGlkIGFuZCB0aHVzIHdlIGRv
bid0IG5lZWQgdGhlIGZhY3RvcnkgbWV0aG9kCisgICAgICAgIG9uIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IgdGhhdCBjcmVhdGVzIElEQlRyYW5zYWN0aW9uQmFja2VuZHMuCisKKyAgICAgICAg
QWRkIGFuIGFzc2VydCB0byBJREJUcmFuc2FjdGlvbkJhY2tlbmQgdG8gbWFrZSBzdXJlIHdlJ3Jl
IG5vdCBpbgorICAgICAgICB0aGUgY29vcmRpbmF0b3IgYW5kIHRoZW4gcmVtb3ZlIHRoZSBjb29y
ZGluYXRvcnMgcmVmIGNvdW50aW5nIGxpbmsKKyAgICAgICAgdG8gdGhlIHRyYW5zYWN0aW9uLgor
CisgICAgICAgIEhhdmUgdGhlIHRyYW5zYWN0aW9uIGJhY2tlbmQgemVybyBvdXQgcmVmcyB0byB0
aGUgZGF0YWJhc2Ugd2hlbiBpdHMKKyAgICAgICAgZG9uZSB1c2luZyBpdC4KKworICAgICAgICBF
eGlzdGluZyB0ZXN0cyBwcm92aWRlIGNvdmVyYWdlIGZvciB0aGlzIHJlZmFjdG9yaW5nLgorCisg
ICAgICAgICogc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24pOgorICAgICAgICAqIHN0
b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjp+SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpj
b21taXQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oOgor
ICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNhY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
aXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
cHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMpOgorICAgICAgICAqIHN0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oOgorCisyMDEwLTEwLTI3ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAg
ICAgICAgIElEQkZhY3RvcnlCYWNrZW5kJ3MgcmVmZXJlbmNlIHRvIElEQkRhdGFiYXNlQmFja2Vu
ZCBzaG91bGQgYmUgd2VhawogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDg0MTYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwu
Y3BwCmluZGV4IDE1NmEyMWQuLjAwNGRjN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgiCiAj
aW5jbHVkZSAiSURCU1FMaXRlRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNRTGl0
ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTGl0ZVRyYW5zYWN0aW9uLmgiCkBAIC0yMjQsNyAr
MjI0LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICBSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0
U3RvcmVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0
b3ItPmNyZWF0ZVRyYW5zYWN0aW9uKG9iamVjdFN0b3Jlcy5nZXQoKSwgSURCVHJhbnNhY3Rpb246
OlZFUlNJT05fQ0hBTkdFLCAwLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNy
ZWF0ZShvYmplY3RTdG9yZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwg
MCwgdGhpcyk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsLCBkYXRh
YmFzZSwgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKSkpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0FMTE9XRURfRVJSOwpAQCAtMjQ3LDcgKzI0Nyw3
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmCiBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oRE9NU3Ry
aW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25n
IHRpbWVvdXQsIEV4Y2VwdGlvbkNvZGUmKQogewogICAgIC8vIEZJWE1FOiBSZXR1cm4gbm90IGFs
bG93ZWQgZXJyIGlmIGNsb3NlIGhhcyBiZWVuIGNhbGxlZC4KLSAgICByZXR1cm4gbV90cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLT5jcmVhdGVUcmFuc2FjdGlvbihvYmplY3RTdG9yZXMsIG1vZGUsIHRp
bWVvdXQsIHRoaXMpOworICAgIHJldHVybiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVh
dGUob2JqZWN0U3RvcmVzLCBtb2RlLCB0aW1lb3V0LCB0aGlzKTsKIH0KIAogdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjbG9zZSgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbC5jcHAKaW5kZXggMmIxZjczMi4uZThkODY0ZCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1dlYkNvcmUv
c3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtMzQsMTYgKzM0LDE1IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoRE9NU3RyaW5nTGlzdCog
b2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQs
IGludCBpZCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCitQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0
ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2ln
bmVkIGxvbmcgdGltZW91dCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCogZGF0YWJhc2UpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0
b3JlcywgbW9kZSwgdGltZW91dCwgaWQsIGRhdGFiYXNlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKG9iamVjdFN0b3JlcywgbW9kZSwgdGltZW91
dCwgZGF0YWJhc2UpKTsKIH0KIAotSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbChET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNo
b3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGlkLCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsKiBkYXRhYmFzZSkKK0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9y
dCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRh
dGFiYXNlKQogICAgIDogbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlcykKICAgICAsIG1f
bW9kZShtb2RlKQogICAgICwgbV90aW1lb3V0KHRpbWVvdXQpIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGltZW91dC4KLSAgICAsIG1faWQoaWQpCiAgICAgLCBtX3N0YXRlKFVudXNlZCkKICAgICAsIG1f
ZGF0YWJhc2UoZGF0YWJhc2UpCiAgICAgLCBtX3RyYW5zYWN0aW9uKG5ldyBTUUxpdGVUcmFuc2Fj
dGlvbihkYXRhYmFzZS0+c3FsaXRlRGF0YWJhc2UoKSkpCkBAIC01MSw2ICs1MCwxMyBAQCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKERPTVN0cmlu
Z0xpc3QqIG9iamVjdFN0b3JlcwogICAgICwgbV90YXNrRXZlbnRUaW1lcih0aGlzLCAmSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza0V2ZW50VGltZXJGaXJlZCkKICAgICAsIG1fcGVuZGlu
Z0V2ZW50cygwKQogeworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+
ZGlkQ3JlYXRlVHJhbnNhY3Rpb24odGhpcyk7Cit9CisKK0lEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw6On5JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKCkKK3sKKyAgICAvLyBJdCBzaG91bGRuJ3Qg
YmUgcG9zc2libGUgZm9yIHRoaXMgb2JqZWN0IHRvIGdldCBkZWxldGVkIHVudGlsIGl0J3MgZWl0
aGVyIGNvbXBsZXRlIG9yIGFib3J0ZWQuCisgICAgQVNTRVJUKG1fc3RhdGUgPT0gRmluaXNoZWQp
OwogfQogCiBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAt
OTQsNiArMTAwLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjphYm9ydCgpCiAK
ICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydCgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgQVNTRVJUKCFt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmlzQWN0aXZlKHRoaXMpKTsKKyAg
ICBtX2RhdGFiYXNlID0gMDsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpk
aWRDb21wbGV0ZVRhc2tFdmVudHMoKQpAQCAtMTMzLDYgKzE0MSw3IEBAIHZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbDo6Y29tbWl0KCkKICAgICBtX3RyYW5zYWN0aW9uLT5jb21taXQoKTsK
ICAgICBtX2NhbGxiYWNrcy0+b25Db21wbGV0ZSgpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKS0+ZGlkRmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgbV9kYXRh
YmFzZSA9IDA7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6dGFza1RpbWVy
RmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4qKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1dlYkNvcmUvc3RvcmFn
ZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggNWY3NDA5Yi4uODg1NDJmNCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAorKysg
Yi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBAIC00MiwyMSAr
NDIsMjAgQEAgY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDsKIAogY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Ug
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IGNyZWF0ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgaW50IGlkLCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
Kik7Ci0gICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpIHsgYWJvcnQoKTsg
fQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IGNyZWF0
ZShET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2ln
bmVkIGxvbmcgdGltZW91dCwgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCopOworICAgIHZpcnR1YWwg
fklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBtb2RlKCkgY29uc3QgeyByZXR1cm4g
bV9tb2RlOyB9CiAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNzT3duUHRyPFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9u
Q29udGV4dDo6VGFzaz4gYWJvcnRUYXNrKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVU
YXNrRXZlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7Ci0gICAgdmlydHVhbCBpbnQg
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNr
cyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJhY2tzKSB7IG1fY2FsbGJhY2tzID0gY2Fs
bGJhY2tzOyB9CiAKICAgICB2b2lkIHJ1bigpOwogCiBwcml2YXRlOgotICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9y
dCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIGludCBpZCwgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbCopOworICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoRE9NU3RyaW5nTGlzdCogb2Jq
ZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIElE
QkRhdGFiYXNlQmFja2VuZEltcGwqKTsKIAogICAgIGVudW0gU3RhdGUgewogICAgICAgICBVbnVz
ZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCkBAIC03NCw3ICs3Myw2IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG1fb2JqZWN0U3RvcmVOYW1lczsKICAgICB1
bnNpZ25lZCBzaG9ydCBtX21vZGU7CiAgICAgdW5zaWduZWQgbG9uZyBtX3RpbWVvdXQ7Ci0gICAg
aW50IG1faWQ7CiAKICAgICBTdGF0ZSBtX3N0YXRlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmggYi9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggNjViMDk3ZC4uODAxMzVmMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCisrKyBi
L1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTMs
NyArNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlVGFzayhQYXNzT3du
UHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gYWJvcnRUYXNrID0gMCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0
KCkgPSAwOwotICAgIHZpcnR1YWwgaW50IGlkKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDYWxsYmFja3MoSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKSA9IDA7CiB9OwogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgYi9X
ZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKaW5kZXggMGVjZTMw
OS4uZjg2N2Y0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcApAQCAtMzYsOCArMzYsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3I6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCkpOworfQorCiBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCkgCi0gICAgOiBtX25leHRJRCgwKQogewogfQogCkBAIC00NSwxNiAr
NDksMTUgQEAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6fklEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKQogewogfQogCi1QYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6Y3JlYXRlVHJhbnNhY3Rpb24oRE9NU3RyaW5n
TGlzdCogb2JqZWN0U3RvcmVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCB1bnNpZ25lZCBsb25nIHRp
bWVvdXQsIElEQkRhdGFiYXNlQmFja2VuZEltcGwqIGRhdGFiYXNlKQordm9pZCBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yOjpkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUob2Jq
ZWN0U3RvcmVzLCBtb2RlLCB0aW1lb3V0LCArK21fbmV4dElELCBkYXRhYmFzZSk7Ci0gICAgbV90
cmFuc2FjdGlvbnMuYWRkKG1fbmV4dElELCB0cmFuc2FjdGlvbik7Ci0gICAgcmV0dXJuIHRyYW5z
YWN0aW9uLnJlbGVhc2UoKTsKKyAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRy
YW5zYWN0aW9uKSk7CisgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLCB0cmFuc2Fj
dGlvbik7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkU3RhcnRUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0cmFuc2FjdGlvbikKIHsKLSAgICBB
U1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKKyAgICBB
U1NFUlQobV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKIAogICAgIG1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24pOwogICAgIHByb2Nlc3NTdGFydGVkVHJh
bnNhY3Rpb25zKCk7CkBAIC02Miw3ICs2NSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvcjo6ZGlkU3RhcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKiB0CiAK
IHZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24oSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCiB7Ci0gICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT5pZCgpKSk7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CiAKICAgICBpZiAobV9zdGFydGVkVHJh
bnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgewogICAgICAgICBBU1NFUlQoIW1fcnVu
bmluZ1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwpAQCAtNzAsMTYgKzczLDM0
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6ZGlkRmluaXNoVHJhbnNhY3Rpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCoKICAgICB9IGVsc2UgaWYgKG1fcnVubmluZ1RyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpCiAgICAgICAgIG1fcnVubmluZ1RyYW5zYWN0
aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwogCi0gICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRy
YW5zYWN0aW9uLT5pZCgpKTsKKyAgICBtX3RyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24p
OwogCiAgICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlvbnMoKTsKIH0KIAorI2lmbmRlZiBOREVC
VUcKKy8vIFZlcmlmaWVzIGludGVybmFsIGNvbnNpc3RpZW5jeSB3aGlsZSByZXR1cm5pbmcgd2hl
dGhlciBhbnl0aGluZyBpcyBmb3VuZC4KK2Jvb2wgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
aXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24pCit7CisgICAg
Ym9vbCBmb3VuZCA9IGZhbHNlOworICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFp
bnModHJhbnNhY3Rpb24pKQorICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgaWYgKG1fcnVubmlu
Z1RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpIHsKKyAgICAgICAgQVNTRVJUKCFm
b3VuZCk7CisgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUKGZvdW5kID09
IG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSk7CisgICAgcmV0dXJuIGZvdW5k
OworfQorI2VuZGlmCisKIHZvaWQgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6cHJvY2Vzc1N0
YXJ0ZWRUcmFuc2FjdGlvbnMoKQogewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbGxvY2F0
ZSBhIHRocmVhZCB0byB0aGUgbmV4dCB0cmFuc2FjdGlvbiB0aGF0J3MKLSAgICAvLyByZWFkeSB0
byBydW4uIEZvciBub3cgd2Ugb25seSBoYXZlIGEgc2luZ2xlIHJ1bm5pbmcgdHJhbnNhY3Rpb24u
Ci0gICAgaWYgKG1fc3RhcnRlZFRyYW5zYWN0aW9ucy5pc0VtcHR5KCkgfHwgIW1fcnVubmluZ1Ry
YW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgLy8gRklYTUU6IEZvciBub3csIHdlIG9ubHkgYWxs
b3cgb25lIHRyYW5zYWN0aW9uIHRvIHJ1biBhdCBhIHRpbWUuCisgICAgaWYgKCFtX3J1bm5pbmdU
cmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zdGFy
dGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCogdHJhbnNhY3Rpb24gPSAqbV9zdGFydGVkVHJhbnNhY3Rpb25z
LmJlZ2luKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIGIvV2ViQ29yZS9zdG9yYWdlL0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaApp
bmRleCBmZGRiMDAzLi5lZjk5ZTczIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N0b3JhZ2UvSURCVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oCisrKyBiL1dlYkNvcmUvc3RvcmFnZS9JREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgKQEAgLTM5LDM5ICszOSwzMSBAQCBjbGFzcyBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOwogY2xhc3MgSURCVHJhbnNhY3Rpb25DYWxsYmFja3M7CiBjbGFzcyBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOwogCi0vLyBUaGlzIGNsYXNzIG1hbmFnZXMgdHJhbnNhY3Rpb25zIGFz
IGZvbGxvd3MuIFJlcXVlc3RzIGZvciBuZXcgdHJhbnNhY3Rpb25zIGFyZQotLy8gYWx3YXlzIHNh
dGlzZmllZCBhbmQgdGhlIG5ldyB0cmFuc2FjdGlvbiBpcyBwbGFjZWQgaW4gYSBxdWV1ZS4KLS8v
IFRyYW5zYWN0aW9ucyBhcmUgbm90IGFjdHVhbGx5IHN0YXJ0ZWQgdW50aWwgdGhlIGZpcnN0IG9w
ZXJhdGlvbiBpcyBpc3N1ZWQuCi0vLyBFYWNoIHRyYW5zYWN0aW9uIGV4ZWN1dGVzIGluIGEgc2Vw
YXJhdGUgdGhyZWFkIGFuZCBpcyBjb21taXR0ZWQgYXV0b21hdGljYWxseQotLy8gd2hlbiB0aGVy
ZSBhcmUgbm8gbW9yZSBvcGVyYXRpb25zIGlzc3VlZCBpbiBpdHMgY29udGV4dC4KLS8vIFdoZW4g
c3RhcnRpbmcsIGEgdHJhbnNhY3Rpb24gd2lsbCBhdHRlbXB0IHRvIGxvY2sgYWxsIHRoZSBvYmpl
Y3Qgc3RvcmVzIGluIGl0cwotLy8gc2NvcGUuIElmIHRoaXMgZG9lcyBub3QgaGFwcGVuIHdpdGhp
biBhIGdpdmVuIHRpbWVvdXQsIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCi0vLyBUaGUgQ29vcmRp
bmF0b3IgbWFpbnRhaW5zIGEgcG9vbCBvZiB0aHJlYWRzLiBJZiB0aGVyZSBhcmUgbm8gdGhyZWFk
cyBhdmFpbGFibGUKLS8vIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGluIHRoZSBxdWV1ZSB3aWxsIGhh
dmUgdG8gd2FpdCB1bnRpbCBhIHRocmVhZCBiZWNvbWVzCi0vLyBhdmFpbGFibGUuCiAvLyBUcmFu
c2FjdGlvbnMgYXJlIGV4ZWN1dGVkIGluIHRoZSBvcmRlciB0aGUgd2VyZSBjcmVhdGVkLgogY2xh
c3MgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcigpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I+IGNyZWF0ZSgpOwogICAgIHZpcnR1YWwgfklEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKTsKIAotICAgIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiBjcmVhdGVUcmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbCopOwotCiAgICAgLy8gQ2FsbGVkIGJ5IHRyYW5zYWN0aW9ucyBhcyB0aGV5IHN0
YXJ0IGFuZCBmaW5pc2guCisgICAgdm9pZCBkaWRDcmVhdGVUcmFuc2FjdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbXBsKik7CiAgICAgdm9pZCBkaWRTdGFydFRyYW5zYWN0aW9uKElEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwqKTsKICAgICB2b2lkIGRpZEZpbmlzaFRyYW5zYWN0aW9uKElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGwqKTsKIAorI2lmbmRlZiBOREVCVUcKKyAgICBib29sIGlzQWN0
aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKIAogICAgIHZvaWQgcHJvY2Vzc1N0YXJ0ZWRU
cmFuc2FjdGlvbnMoKTsKIAotICAgIC8vIFRoaXMgbWFwIG93bnMgYWxsIHRyYW5zYWN0aW9ucyBr
bm93biB0byB0aGUgY29vcmRpbmF0b3IuCi0gICAgSGFzaE1hcDxpbnQsIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiA+IG1fdHJhbnNhY3Rpb25zOworICAgIC8vIFRoaXMgaXMganVz
dCBhbiBlZmZpY2llbnQgd2F5IHRvIGtlZXAgcmVmZXJlbmNlcyB0byBhbGwgdHJhbnNhY3Rpb25z
LgorICAgIEhhc2hNYXA8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCosIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsPiA+IG1fdHJhbnNhY3Rpb25zOwogICAgIC8vIFRyYW5zYWN0aW9u
cyBpbiBkaWZmZXJlbnQgc3RhdGVzIGFyZSBncm91cGVkIGJlbG93LgogICAgIExpc3RIYXNoU2V0
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7CiAgICAg
SGFzaFNldDxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsKj4gbV9ydW5uaW5nVHJhbnNhY3Rpb25z
OwotICAgIGludCBtX25leHRJRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDkwNTdlNjAuLjdiYWFlOTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDEwLTEwLTI3ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIElEQlRy
YW5zYWN0aW9uQmFja2VuZC9Db29yZGluYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg0MjUKKworICAgICAgICBSZW1vdmUgb2Jzb2xldGUgOjpp
ZCgpIG1ldGhvZC4KKworICAgICAgICAqIHB1YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oOgorICAg
ICAgICAqIHNyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5jcHA6CisgICAgICAgICogc3Jj
L0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Lmg6CisgICAgICAgICogc3JjL1dlYklEQlRyYW5z
YWN0aW9uSW1wbC5jcHA6CisgICAgICAgICogc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5oOgor
CiAyMDEwLTEwLTI2ICBWaWN0b3JpYSBLaXJzdCAgPHZya0Bnb29nbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJJREJUcmFuc2FjdGlvbi5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJU
cmFuc2FjdGlvbi5oCmluZGV4IDM4NWRkMWUuLmNmZjdjNjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViSURCVHJhbnNhY3Rpb24uaAorKysgYi9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYklEQlRyYW5zYWN0aW9uLmgKQEAgLTUyLDExICs1Miw2IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgeyBXRUJLSVRf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2FsbGJhY2tzKFdlYklEQlRyYW5zYWN0aW9u
Q2FsbGJhY2tzKikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIC8vIEZJ
WE1FOiB0aGlzIGlzIG5ldmVyIGNhbGxlZCBmcm9tIFdlYkNvcmUuIEZpbmQgYSBjbGVhbmVyIHNv
bHV0aW9uLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZFByb3h5LmNwcAppbmRleCA0YjE5ZWU0Li43YTg4YjEzIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5LmNwcApAQCAtODQsMTEgKzg0LDYg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eTo6ZGlkQ29tcGxldGVUYXNrRXZlbnRz
KCkKICAgICBtX3dlYklEQlRyYW5zYWN0aW9uLT5kaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0K
IAotaW50IElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fd2ViSURCVHJhbnNhY3Rpb24tPmlkKCk7Ci19Ci0KIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHk6OnNldENhbGxiYWNrcyhJREJUcmFuc2FjdGlvbkNhbGxiYWNrcyogY2FsbGJh
Y2tzKQogewogICAgIG1fd2ViSURCVHJhbnNhY3Rpb24tPnNldENhbGxiYWNrcyhuZXcgV2ViSURC
VHJhbnNhY3Rpb25DYWxsYmFja3NJbXBsKGNhbGxiYWNrcykpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eS5oCmluZGV4IDBjNTZmMTkuLjBiZjg0
ZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5LmgKQEAgLTQ3LDcgKzQ3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgp
OwogICAgIHZpcnR1YWwgYm9vbCBzY2hlZHVsZVRhc2soUGFzc093blB0cjxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPiwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNr
Pik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2ZW50cygpOwotICAgIHZpcnR1
YWwgaW50IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldENhbGxiYWNrcyhJREJUcmFu
c2FjdGlvbkNhbGxiYWNrcyopOwogCiAgICAgV2ViS2l0OjpXZWJJREJUcmFuc2FjdGlvbiogZ2V0
V2ViSURCVHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dlYklEQlRyYW5zYWN0aW9uLmdl
dCgpOyB9CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9u
SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAK
aW5kZXggZjVkODc0OC4uNDMwN2NiNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
VHJhbnNhY3Rpb25JbXBsLmNwcApAQCAtNjksMTEgKzY5LDYgQEAgdm9pZCBXZWJJREJUcmFuc2Fj
dGlvbkltcGw6OmRpZENvbXBsZXRlVGFza0V2ZW50cygpCiAgICAgbV9iYWNrZW5kLT5kaWRDb21w
bGV0ZVRhc2tFdmVudHMoKTsKIH0KIAotaW50IFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6aWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2JhY2tlbmQtPmlkKCk7Ci19Ci0KIHZvaWQgV2ViSURCVHJh
bnNhY3Rpb25JbXBsOjpzZXRDYWxsYmFja3MoV2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqIGNh
bGxiYWNrcykKIHsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25DYWxsYmFja3M+IGlkYkNhbGxi
YWNrcyA9IElEQlRyYW5zYWN0aW9uQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShjYWxsYmFja3MpOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaCBi
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKaW5kZXggMjRiYWI5
MS4uYjI2YjNhYyAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2Fj
dGlvbkltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1w
bC5oCkBAIC00NSw3ICs0NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0
b3JlKiBvYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUpOwogICAgIHZpcnR1YWwgdm9p
ZCBhYm9ydCgpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKLSAg
ICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRDYWxsYmFja3Mo
V2ViSURCVHJhbnNhY3Rpb25DYWxsYmFja3MqKTsKIAogICAgIHZpcnR1YWwgV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBnZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UoKSBjb25zdDsK
</data>
<flag name="review"
          id="62213"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>