<?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>38236</bug_id>
          
          <creation_ts>2010-04-27 17:31:16 -0700</creation_ts>
          <short_desc>getFramebufferAttachmentParameter should return the original WebGLTexture/WebGLRenderbuffer instead of creating new ones sharing names.</short_desc>
          <delta_ts>2010-05-04 17:30:50 -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>WebGL</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="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218082</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-27 17:31:16 -0700</bug_when>
    <thetext>Having multiple CanvasObject share the same resource name makes it very difficult to track the resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219078</commentid>
    <comment_count>1</comment_count>
      <attachid>54716</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-29 09:53:05 -0700</bug_when>
    <thetext>Created attachment 54716
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219592</commentid>
    <comment_count>2</comment_count>
      <attachid>54716</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-30 13:18:56 -0700</bug_when>
    <thetext>Comment on attachment 54716
patch

Generally speaking member functions should be as private as possible. If you already have a WebGLFramebuffer* it&apos;s a programming error to call isFramebuffer, so it&apos;s better to make the WebGLFramebuffer::isFramebuffer private even though the function it is overriding in the base class, CanvasObject::isFramebuffer, is public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219605</commentid>
    <comment_count>3</comment_count>
      <attachid>54825</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-30 13:51:03 -0700</bug_when>
    <thetext>Created attachment 54825
revised patch : responding to Darin Adler&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220386</commentid>
    <comment_count>4</comment_count>
      <attachid>54825</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-03 17:30:34 -0700</bug_when>
    <thetext>Comment on attachment 54825
revised patch : responding to Darin Adler&apos;s review

Looks good overall. It&apos;s good that you were able to reuse the m_canvasObjects table to reduce the risk of changing the memory management of the WebGLRenderingContext class. I think that we should reexamine the lifetime of the CanvasObjects / WebGLObjects, but that should wait for a subsequent bug.

One comment:
WebCore/html/canvas/WebGLRenderingContext.cpp:2844
 +              RefPtr&lt;WebGLTexture&gt; tex = reinterpret_cast&lt;WebGLTexture*&gt;((*it).get());
Can you try to write instead:

return reinterpret_cast&lt;RefPtr&lt;WebGLTexture&gt; &gt;(*it).release();

Perhaps you&apos;ve already tried this and it doesn&apos;t work.


WebCore/html/canvas/WebGLRenderingContext.cpp:2856
 +              RefPtr&lt;WebGLRenderbuffer&gt; buffer = reinterpret_cast&lt;WebGLRenderbuffer*&gt;((*it).get());
If the above suggestion works, please use it here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220628</commentid>
    <comment_count>5</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-04 09:21:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 54825 [details])
&gt; Looks good overall. It&apos;s good that you were able to reuse the m_canvasObjects
&gt; table to reduce the risk of changing the memory management of the
&gt; WebGLRenderingContext class. I think that we should reexamine the lifetime of
&gt; the CanvasObjects / WebGLObjects, but that should wait for a subsequent bug.
&gt; 
&gt; One comment:
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2844
&gt;  +              RefPtr&lt;WebGLTexture&gt; tex =
&gt; reinterpret_cast&lt;WebGLTexture*&gt;((*it).get());
&gt; Can you try to write instead:
&gt; 
&gt; return reinterpret_cast&lt;RefPtr&lt;WebGLTexture&gt; &gt;(*it).release();
&gt; 

I tried.  The cast is invalid.

&gt; Perhaps you&apos;ve already tried this and it doesn&apos;t work.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2856
&gt;  +              RefPtr&lt;WebGLRenderbuffer&gt; buffer =
&gt; reinterpret_cast&lt;WebGLRenderbuffer*&gt;((*it).get());
&gt; If the above suggestion works, please use it here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220632</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-04 09:40:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 54825 [details] [details])
&gt; &gt; Looks good overall. It&apos;s good that you were able to reuse the m_canvasObjects
&gt; &gt; table to reduce the risk of changing the memory management of the
&gt; &gt; WebGLRenderingContext class. I think that we should reexamine the lifetime of
&gt; &gt; the CanvasObjects / WebGLObjects, but that should wait for a subsequent bug.
&gt; &gt; 
&gt; &gt; One comment:
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2844
&gt; &gt;  +              RefPtr&lt;WebGLTexture&gt; tex =
&gt; &gt; reinterpret_cast&lt;WebGLTexture*&gt;((*it).get());
&gt; &gt; Can you try to write instead:
&gt; &gt; 
&gt; &gt; return reinterpret_cast&lt;RefPtr&lt;WebGLTexture&gt; &gt;(*it).release();
&gt; &gt; 
&gt; 
&gt; I tried.  The cast is invalid.

OK. You can still write &quot;return tex.release();&quot; instead of explicitly constructing the PassRefPtr out of the RefPtr. In fact I think you should do this to reduce churn on the reference counts.

&gt; 
&gt; &gt; Perhaps you&apos;ve already tried this and it doesn&apos;t work.
&gt; &gt; 
&gt; &gt; 
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2856
&gt; &gt;  +              RefPtr&lt;WebGLRenderbuffer&gt; buffer =
&gt; &gt; reinterpret_cast&lt;WebGLRenderbuffer*&gt;((*it).get());
&gt; &gt; If the above suggestion works, please use it here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220637</commentid>
    <comment_count>7</comment_count>
      <attachid>55025</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-04 10:13:05 -0700</bug_when>
    <thetext>Created attachment 55025
revised patch: responding to Ken Russell&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220648</commentid>
    <comment_count>8</comment_count>
      <attachid>55025</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-04 10:34:53 -0700</bug_when>
    <thetext>Comment on attachment 55025
revised patch: responding to Ken Russell&apos;s review

Looks good. Thanks for cleaning this up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220686</commentid>
    <comment_count>9</comment_count>
      <attachid>55025</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-05-04 11:38:27 -0700</bug_when>
    <thetext>Comment on attachment 55025
revised patch: responding to Ken Russell&apos;s review

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220892</commentid>
    <comment_count>10</comment_count>
      <attachid>55025</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-04 17:30:44 -0700</bug_when>
    <thetext>Comment on attachment 55025
revised patch: responding to Ken Russell&apos;s review

Clearing flags on attachment: 55025

Committed r58790: &lt;http://trac.webkit.org/changeset/58790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220893</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-04 17:30:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54716</attachid>
            <date>2010-04-29 09:53:05 -0700</date>
            <delta_ts>2010-04-30 13:51:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>same.patch</filename>
            <type>text/plain</type>
            <size>17468</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDQtMjkgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGUgb3JpZ2luYWwgV2Vi
R0xUZXh0dXJlL1dlYkdMUmVuZGVyYnVmZmVyIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMg
c2hhcmluZyBuYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4MjM2CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaDogQWRk
IHR5cGUgY2hlY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojpp
c0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6OmlzRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNPYmplY3Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc09iamVj
dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOiBBZGQg
dHlwZSBjaGVjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6aXNC
dWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogQWRkIHR5
cGUgY2hlY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6
aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmg6IEFk
ZCB0eXBlIGNoZWNrIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6
aXNQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6
IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmg6IEFkZCB0eXBlIGNoZWNrIGZ1bmN0aW9uczsgcmVt
b3ZlIGNvbnN0cnVjdG9yIHVzaW5nIGV4aXN0aW5nIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmJ1ZmZlcjo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6IFJldHVybiBv
cmlnaW5hbCBUZXh0dXJlL1JlbmRlcmJ1ZmZlciBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVz
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kVGV4dHVyZSk6
IEZpbmQgYSBXZWJHTFRleHR1cmUgdXNpbmcgYSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kUmVuZGVyYnVmZmVyKTogRmluZCBhIFdlYkdMUmVuZGVy
YnVmZmVyIHVzaW5nIGEgbmFtZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDogQWRkIGZpbmQqIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFNoYWRlci5oOiBBZGQgdHlwZSBjaGVjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFNoYWRlcjo6aXNTaGFkZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHA6IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOiBBZGQgdHlwZSBjaGVjayBmdW5jdGlvbnM7
IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjppc1RleHR1cmUpOgorCiAyMDEwLTA0LTI4ICBEaW1pdHJpIEdsYXpr
b3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmgJKHJldmlzaW9uIDU4NTIw
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNiArNTEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBDYW52YXNPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpID0gMDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHJl
dmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gU2V0cyB0aGUgY2FjaGVkIG1heCBpbmRleCBmb3IgdGhlIGdpdmVuIHR5cGUuCiAgICAgICAg
IHZvaWQgc2V0Q2FjaGVkTWF4SW5kZXgodW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIHZhbHVlKTsK
IAorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOwogICAgICAgICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBQbGF0
Zm9ybTNET2JqZWN0IG9iaik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZm
ZXIuaAkocmV2aXNpb24gNTg1MjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgaXNTdGVuY2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
U3RlbmNpbEF0dGFjaGVkOyB9CiAgICAgICAgIGJvb2wgaXNEZXB0aFN0ZW5jaWxBdHRhY2hlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxBdHRhY2hlZDsgfQogCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAg
cHJvdGVjdGVkOgogICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNp
b24gNTg1MjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw3ICs0NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBjYWNoZUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwogICAgICAgICBpbnQgbnVtQWN0aXZlQXR0
cmliTG9jYXRpb25zKCk7CiAgICAgICAgIGludCBnZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpbnQg
aW5kZXgpOwotICAgICAgICAKKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmFtKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFByb2dy
YW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDU4NTIwKQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDExICszNyw2IEBAIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGUKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVyKGN0eCkpOwogfQogCi1QYXNz
UmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY3R4LCBQbGF0Zm9ybTNET2JqZWN0IG9iaikKLXsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVyKGN0eCwgb2JqKSk7Ci19Ci0KIFdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKICAgICA6IENhbnZhc09iamVjdChjdHgpCiAgICAgLCBtX2ludGVybmFsZm9ybWF0KEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBNCkKQEAgLTQ5LDEzICs0NCw2IEBAIFdlYkdMUmVuZGVyYnVmZmVy
OjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWIKICAgICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CiB9CiAKLVdlYkdMUmVuZGVyYnVm
ZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgUGxhdGZv
cm0zRE9iamVjdCBvYmopCi0gICAgOiBDYW52YXNPYmplY3QoY3R4KQotICAgICwgbV9pbnRlcm5h
bGZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQpCi17Ci0gICAgc2V0T2JqZWN0KG9iaiwg
ZmFsc2UpOwotfQotCiB2b2lkIFdlYkdMUmVuZGVyYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRm
b3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+ZGVsZXRlUmVuZGVyYnVmZmVyKG9iamVjdCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA1ODUyMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTcgKzM4LDE0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJidWZmZXIo
KSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwotICAg
ICAgICAKLSAgICAgICAgLy8gRm9yIHF1ZXJ5aW5nIHByZXZpb3VzbHkgY3JlYXRlZCBvYmplY3Rz
IHZpYSBlLmcuIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcgotICAgICAgICAvLyBG
SVhNRTogc2hvdWxkIGNvbnNpZGVyIGNhbm9uaWNhbGl6aW5nIHRoZXNlIG9iamVjdHMKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcik7CiAKICAgICAgICAg
dm9pZCBzZXRJbnRlcm5hbGZvcm1hdCh1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0KSB7IG1f
aW50ZXJuYWxmb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsgfQogICAgICAgICB1bnNpZ25lZCBsb25n
IGdldEludGVybmFsZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbGZvcm1hdDsgfQog
CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCosIFBsYXRmb3JtM0RPYmplY3QpOwogICAgICAgICAKICAgICAgICAgdmlydHVh
bCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDU4NTIw
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NzksMTggKzk3OSwxMSBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGCiAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSwgJnR5cGUpOwogICAgICAgICBpbnQgdmFs
dWUgPSAwOwogICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfT0JKRUNUX05BTUUsICZ2YWx1ZSk7Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91
bGQgY29uc2lkZXIgY2Fub25pY2FsaXppbmcgdGhlc2Ugb2JqZWN0cwogICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSOiB7
Ci0gICAgICAgICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IHRtcCA9IFdlYkdMUmVuZGVy
YnVmZmVyOjpjcmVhdGUodGhpcywgdmFsdWUpOwotICAgICAgICAgICAgYWRkT2JqZWN0KHRtcC5n
ZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+KHRtcCkpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkU6IHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRtcCA9
IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMsIHZhbHVlKTsKLSAgICAgICAgICAgIGFkZE9iamVj
dCh0bXAuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRy
PFdlYkdMVGV4dHVyZT4odG1wKSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhm
aW5kUmVuZGVyYnVmZmVyKHN0YXRpY19jYXN0PFBsYXRmb3JtM0RPYmplY3Q+KHZhbHVlKSkpOwor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFOgorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhmaW5kVGV4dHVyZShzdGF0aWNfY2FzdDxQbGF0Zm9ybTNET2JqZWN0
Pih2YWx1ZSkpKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIEZJWE1FOiByYWlz
ZSBleGNlcHRpb24/CiAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CkBAIC0yODQz
LDYgKzI4MzYsMzAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaEFuZFJlbQog
ICAgIG1fY2FudmFzT2JqZWN0cy5jbGVhcigpOwogfQogCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IG9i
aikKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxDYW52YXNPYmplY3Q+ID46Oml0ZXJhdG9yIHBlbmQg
PSBtX2NhbnZhc09iamVjdHMuZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxDYW52YXNP
YmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7IGl0ICE9IHBl
bmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQpLT5pc1RleHR1cmUoKSAmJiAoKml0KS0+b2Jq
ZWN0KCkgPT0gb2JqKSB7CisgICAgICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXggPSBy
ZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KCgqaXQpLmdldCgpKTsKKyAgICAgICAgICAg
IHJldHVybiBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4odGV4KTsKKyAgICAgICAgfQorICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpmaW5kUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQor
eworICAgIEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVjdD4gPjo6aXRlcmF0b3IgcGVuZCA9IG1f
Y2FudmFzT2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVj
dD4gPjo6aXRlcmF0b3IgaXQgPSBtX2NhbnZhc09iamVjdHMuYmVnaW4oKTsgaXQgIT0gcGVuZDsg
KytpdCkgeworICAgICAgICBpZiAoKCppdCktPmlzUmVuZGVyYnVmZmVyKCkgJiYgKCppdCktPm9i
amVjdCgpID09IG9iaikgeworICAgICAgICAgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBi
dWZmZXIgPSByZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4oKCppdCkuZ2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KGJ1ZmZl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIFdlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5QYXJhbWV0ZXIodW5zaWduZWQgbG9uZyBw
bmFtZSkKIHsKICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlOwpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA1ODUyMCkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5OSw2ICsyOTksOCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAKICAgICAgICAgdm9pZCBh
ZGRPYmplY3QoQ2FudmFzT2JqZWN0Kik7CiAgICAgICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxs
T2JqZWN0cygpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gZmluZFRleHR1cmUo
UGxhdGZvcm0zRE9iamVjdCk7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
IGZpbmRSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAgICAgdm9pZCBtYXJr
Q29udGV4dENoYW5nZWQoKTsKICAgICAgICAgdm9pZCBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
Ym9vbCBjaGFuZ2VkKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNpb24g
NTg1MjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDcgKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IH5XZWJHTFNoYWRlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiwgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUpOwotICAgICAgICAKKworICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICBw
cml2YXRlOgogICAgICAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHcmFw
aGljc0NvbnRleHQzRDo6V2ViR0xFbnVtVHlwZSk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVGV4dHVyZS5jcHAJKHJldmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsNiBAQCBQYXNzUmVm
UHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJHTFRleHR1cmUoY3R4KSk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJH
TFRleHR1cmU6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgUGxhdGZvcm0zRE9i
amVjdCBvYmopCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFRleHR1cmUoY3R4LCBv
YmopKTsKLX0KLQogV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjdHgpCiAgICAgOiBDYW52YXNPYmplY3QoY3R4KQogICAgICwgY3ViZU1hcFJXcmFwTW9k
ZUluaXRpYWxpemVkKGZhbHNlKQpAQCAtNDksMTMgKzQ0LDYgQEAgV2ViR0xUZXh0dXJlOjpXZWJH
TFRleHR1cmUoV2ViR0xSZW5kZXJpbgogICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNz
Q29udGV4dDNEKCktPmNyZWF0ZVRleHR1cmUoKSk7CiB9CiAKLVdlYkdMVGV4dHVyZTo6V2ViR0xU
ZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBQbGF0Zm9ybTNET2JqZWN0IG9iaikK
LSAgICA6IENhbnZhc09iamVjdChjdHgpCi0gICAgLCBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6
ZWQoZmFsc2UpCi17Ci0gICAgc2V0T2JqZWN0KG9iaiwgZmFsc2UpOwotfQotCiB2b2lkIFdlYkdM
VGV4dHVyZTo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBj
b250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNpb24gNTg1MjApCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCAr
MzgsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgfldlYkdMVGV4dHVy
ZSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwotICAgIAot
ICAgICAgICAvLyBGb3IgcXVlcnlpbmcgcHJldmlvdXNseSBjcmVhdGVkIG9iamVjdHMgdmlhIGUu
Zy4gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyCi0gICAgICAgIC8vIEZJWE1FOiBz
aG91bGQgY29uc2lkZXIgY2Fub25pY2FsaXppbmcgdGhlc2Ugb2JqZWN0cwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
LCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgICAgICBib29sIGlzQ3ViZU1hcFJXcmFwTW9kZUlu
aXRpYWxpemVkKCkgewogICAgICAgICAgICAgcmV0dXJuIGN1YmVNYXBSV3JhcE1vZGVJbml0aWFs
aXplZDsKQEAgLTUxLDkgKzQ3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
IGN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCA9IGluaXRpYWxpemVkOwogICAgICAgICB9CiAK
KyAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KwogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOwotICAgICAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgUGxh
dGZvcm0zRE9iamVjdCk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU4NTIxKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMjkg
IFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIg
c2hvdWxkIHJldHVybiB0aGUgb3JpZ2luYWwgV2ViR0xUZXh0dXJlL1dlYkdMUmVuZGVyYnVmZmVy
IGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMgc2hhcmluZyBuYW1lcy4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjM2CisKKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9nbC1vYmplY3QtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dDogQ2hlY2sg
aWYgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIHJldHVybiBhIHRleHR1cmUvcmVu
ZGVyYnVmZmVyIHRoYXQgbWF0Y2hlcyB0aGUgb3JpZ2luYWwgb25lLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9nbC1vYmplY3QtZ2V0LWNhbGxzLmpzOiBEaXR0by4K
KwogMjAxMC0wNC0yOSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIGV4cGVjdGF0aW9ucyB0d2Vhay4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLW9iamVjdC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLW9iamVjdC1nZXQt
Y2FsbHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1ODUyMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2dsLW9iamVjdC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xMywxMSArMTMsMTEgQEAgUEFTUyBnbC5nZXRFcnJvcigpIGlzIDAKIFBBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyAwCiBQQVNTIGdsLmdldEVycm9yKCkgaXMgMAogUEFTUyBnbC5nZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFD
SE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKSBpcyBnbC5URVhU
VVJFCi1QQVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJV
RkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUUpIGlzIG5vbi1udWxsLgorUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKSBpcyB0ZXh0dXJlCiBQQVNTIGdsLmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNI
TUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCkgaXMgMAogUEFT
UyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGds
LkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VC
RV9NQVBfRkFDRSkgaXMgMAogUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEUpIGlzIGdsLlJFTkRFUkJVRkZFUgotUEFTUyBnbC5nZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX0FUVEFD
SE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpIGlzIG5vbi1udWxs
LgorUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZG
RVIsIGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUUpIGlzIHJlbmRlcmJ1ZmZlcgogUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHN0YW5k
YXJkUHJvZ3JhbSwgZ2wuREVMRVRFX1NUQVRVUykgaXMgZmFsc2UKIFBBU1MgZ2wuZ2V0UHJvZ3Jh
bVBhcmFtZXRlcihzdGFuZGFyZFByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCiBQQVNT
IHR5cGVvZiBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHN0YW5kYXJkUHJvZ3JhbSwgZ2wuVkFMSURB
VEVfU1RBVFVTKSBpcyAiYm9vbGVhbiIKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3NjcmlwdC10ZXN0cy9nbC1vYmplY3QtZ2V0LWNhbGxzLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9nbC1vYmplY3QtZ2V0LWNh
bGxzLmpzCShyZXZpc2lvbiA1ODUyMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3NjcmlwdC10ZXN0cy9nbC1vYmplY3QtZ2V0LWNhbGxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02
MiwxMiArNjIsMTIgQEAgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRQog
Ly8gcGFyYW1ldGVycyB0byB0aGlzIG9uZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zMTg0My4KIC8vc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0
dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CiBzaG91bGRC
ZSgnZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBn
bC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQ
RSknLCAnZ2wuVEVYVFVSRScpOwotc2hvdWxkQmVOb25OdWxsKCdnbC5nZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBn
bC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKScpOworc2hvdWxkQmUoJ2dsLmdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1Jf
QVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpJywgJ3Rl
eHR1cmUnKTsKIHNob3VsZEJlKCdnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIo
Z2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX1RFWFRVUkVfTEVWRUwpJywgJzAnKTsKIHNob3VsZEJlKCdnbC5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQw
LCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSknLCAnMCcp
OwogCiBzaG91bGRCZSgnZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZS
QU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9UWVBFKScsICdnbC5SRU5ERVJCVUZGRVInKTsKLXNob3VsZEJlTm9uTnVsbCgnZ2wu
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBU
SF9BVFRBQ0hNRU5ULCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKScpOwor
c2hvdWxkQmUoJ2dsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJV
RkZFUiwgZ2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfTkFNRSknLCAncmVuZGVyYnVmZmVyJyk7CiAKIC8vIFRlc3QgZ2V0UHJvZ3JhbVBhcmFtZXRl
cgogc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIoc3RhbmRhcmRQcm9ncmFtLCBnbC5E
RUxFVEVfU1RBVFVTKScsICdmYWxzZScpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54825</attachid>
            <date>2010-04-30 13:51:03 -0700</date>
            <delta_ts>2010-05-04 10:13:05 -0700</delta_ts>
            <desc>revised patch : responding to Darin Adler&apos;s review</desc>
            <filename>same.patch</filename>
            <type>text/plain</type>
            <size>17729</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDQtMjkgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGUgb3JpZ2luYWwgV2Vi
R0xUZXh0dXJlL1dlYkdMUmVuZGVyYnVmZmVyIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMg
c2hhcmluZyBuYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4MjM2CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaDogQWRk
IHR5cGUgY2hlY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojpp
c0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6OmlzRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNPYmplY3Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc09iamVj
dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOiBBZGQg
dHlwZSBjaGVjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6aXNC
dWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogQWRkIHR5
cGUgY2hlY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6
aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmg6IEFk
ZCB0eXBlIGNoZWNrIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6
aXNQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6
IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmg6IEFkZCB0eXBlIGNoZWNrIGZ1bmN0aW9uczsgcmVt
b3ZlIGNvbnN0cnVjdG9yIHVzaW5nIGV4aXN0aW5nIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmJ1ZmZlcjo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6IFJldHVybiBv
cmlnaW5hbCBUZXh0dXJlL1JlbmRlcmJ1ZmZlciBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVz
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kVGV4dHVyZSk6
IEZpbmQgYSBXZWJHTFRleHR1cmUgdXNpbmcgYSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kUmVuZGVyYnVmZmVyKTogRmluZCBhIFdlYkdMUmVuZGVy
YnVmZmVyIHVzaW5nIGEgbmFtZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDogQWRkIGZpbmQqIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFNoYWRlci5oOiBBZGQgdHlwZSBjaGVjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFNoYWRlcjo6aXNTaGFkZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHA6IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOiBBZGQgdHlwZSBjaGVjayBmdW5jdGlvbnM7
IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjppc1RleHR1cmUpOgorCiAyMDEwLTA0LTI4ICBEaW1pdHJpIEdsYXpr
b3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmgJKHJldmlzaW9uIDU4NTIw
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNiArNTEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBDYW52YXNPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpID0gMDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHJl
dmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvKTsKICAgICAKICAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKICAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IG1fZWxlbWVudEFy
cmF5QnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBtX2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5n
dGg7CiAgICAgICAgIHVuc2lnbmVkIG1fYXJyYXlCdWZmZXJCeXRlTGVuZ3RoOwpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDU4NTIwKQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdmlydHVh
bCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKLSAgICAgIHByaXZhdGU6
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzRnJhbWVidWZmZXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgYm9vbCBtX2lzRGVwdGhBdHRhY2hlZDsKICAg
ICAgICAgYm9vbCBtX2lzU3RlbmNpbEF0dGFjaGVkOwogICAgICAgICBib29sIG1faXNEZXB0aFN0
ZW5jaWxBdHRhY2hlZDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNp
b24gNTg1MjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMyArNDUsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CiAgICAgICAgIGludCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMoKTsKICAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGlu
dCBpbmRleCk7Ci0gICAgICAgIAorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFByb2dy
YW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIHByaXZhdGU6CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyYW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAg
ICAgICAgVmVjdG9yPGludD4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnM7CiAgICAgfTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCShyZXZpc2lv
biA1ODUyMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsNiBAQCBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVm
ZmVyPiBXZWJHTFJlbmRlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFJlbmRlcmJ1ZmZl
cihjdHgpKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJi
dWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgUGxhdGZvcm0zRE9iamVj
dCBvYmopCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFJlbmRlcmJ1ZmZlcihjdHgs
IG9iaikpOwotfQotCiBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgOiBDYW52YXNPYmplY3QoY3R4KQogICAgICwgbV9p
bnRlcm5hbGZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQpCkBAIC00OSwxMyArNDQsNiBA
QCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViCiAgICAgc2V0T2JqZWN0
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOwog
fQogCi1XZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjdHgsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotICAgIDogQ2FudmFzT2JqZWN0KGN0
eCkKLSAgICAsIG1faW50ZXJuYWxmb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQotewot
ICAgIHNldE9iamVjdChvYmosIGZhbHNlKTsKLX0KLQogdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6
X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkocmV2aXNpb24gNTg1MjApCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDIxICszOCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
fldlYkdMUmVuZGVyYnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQogICAgICAgICAKICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBxdWVyeWluZyBwcmV2aW91
c2x5IGNyZWF0ZWQgb2JqZWN0cyB2aWEgZS5nLiBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCBjb25zaWRlciBjYW5vbmljYWxpemluZyB0
aGVzZSBvYmplY3RzCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJi
dWZmZXIpOwogCiAgICAgICAgIHZvaWQgc2V0SW50ZXJuYWxmb3JtYXQodW5zaWduZWQgbG9uZyBp
bnRlcm5hbGZvcm1hdCkgeyBtX2ludGVybmFsZm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7IH0KICAg
ICAgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJuYWxmb3JtYXQ7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgICAgIFdlYkdMUmVuZGVyYnVmZmVy
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFBsYXRmb3JtM0RPYmplY3QpOwogICAgICAgICAKICAg
ICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKLSAg
ICAgIHByaXZhdGU6CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
YnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bV9pbnRlcm5hbGZvcm1hdDsKICAgICB9OwogICAgIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTg1MjApCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3OSwxOCArOTc5LDExIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEYKICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFLCAmdHlwZSk7CiAgICAgICAgIGludCB2YWx1ZSA9IDA7CiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFy
Z2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRSwgJnZhbHVlKTsKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCBjb25zaWRl
ciBjYW5vbmljYWxpemluZyB0aGVzZSBvYmplY3RzCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVI6IHsKLSAgICAgICAg
ICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gdG1wID0gV2ViR0xSZW5kZXJidWZmZXI6OmNy
ZWF0ZSh0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRPYmplY3QodG1wLmdldCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZl
cj4odG1wKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTogewotICAgICAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdG1wID0gV2ViR0xUZXh0
dXJlOjpjcmVhdGUodGhpcywgdmFsdWUpOwotICAgICAgICAgICAgYWRkT2JqZWN0KHRtcC5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0
dXJlPih0bXApKTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVI6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZpbmRSZW5kZXJi
dWZmZXIoc3RhdGljX2Nhc3Q8UGxhdGZvcm0zRE9iamVjdD4odmFsdWUpKSk7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkU6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGZpbmRUZXh0dXJlKHN0YXRpY19jYXN0PFBsYXRmb3JtM0RPYmplY3Q+KHZhbHVlKSkp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlv
bj8KICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKQEAgLTI4NDMsNiArMjgzNiwz
MCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtCiAgICAgbV9jYW52
YXNPYmplY3RzLmNsZWFyKCk7CiB9CiAKK1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZpbmRUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAg
IEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVjdD4gPjo6aXRlcmF0b3IgcGVuZCA9IG1fY2FudmFz
T2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVjdD4gPjo6
aXRlcmF0b3IgaXQgPSBtX2NhbnZhc09iamVjdHMuYmVnaW4oKTsgaXQgIT0gcGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoKCppdCktPmlzVGV4dHVyZSgpICYmICgqaXQpLT5vYmplY3QoKSA9PSBv
YmopIHsKKyAgICAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViR0xUZXh0dXJlKj4oKCppdCkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIFBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPih0ZXgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biAwOworfQorCitQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZpbmRSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCit7CisgICAgSGFz
aFNldDxSZWZQdHI8Q2FudmFzT2JqZWN0PiA+OjppdGVyYXRvciBwZW5kID0gbV9jYW52YXNPYmpl
Y3RzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q2FudmFzT2JqZWN0PiA+OjppdGVy
YXRvciBpdCA9IG1fY2FudmFzT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBwZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmICgoKml0KS0+aXNSZW5kZXJidWZmZXIoKSAmJiAoKml0KS0+b2JqZWN0KCkgPT0g
b2JqKSB7CisgICAgICAgICAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGJ1ZmZlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPigoKml0KS5nZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4oYnVmZmVyKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0Qm9vbGVhblBhcmFtZXRlcih1bnNpZ25lZCBsb25nIHBuYW1lKQogewog
ICAgIHVuc2lnbmVkIGNoYXIgdmFsdWU7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDYgKzI5
OSw4IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKIAogICAgICAgICB2b2lkIGFkZE9iamVjdChD
YW52YXNPYmplY3QqKTsKICAgICAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7
CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBmaW5kVGV4dHVyZShQbGF0Zm9ybTNE
T2JqZWN0KTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gZmluZFJlbmRl
cmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgICAgICB2b2lkIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwogICAgICAgICB2b2lkIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChib29sIGNoYW5n
ZWQpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCShyZXZpc2lvbiA1ODUyMCkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgs
MTEgKzM4LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+V2ViR0xT
aGFkZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIEdyYXBo
aWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlKTsKLSAgICAgICAgCisKICAgICBwcml2YXRlOgog
ICAgICAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHcmFwaGljc0NvbnRl
eHQzRDo6V2ViR0xFbnVtVHlwZSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmpl
Y3QoUGxhdGZvcm0zRE9iamVjdCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzU2hhZGVyKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiA1ODUy
MCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzcsMTEgKzM3LDYgQEAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMVGV4dHVy
ZTo6YwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0eCkpOwogfQogCi1Q
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjdHgsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0eCwgb2JqKSk7Ci19Ci0KIFdlYkdMVGV4dHVyZTo6V2Vi
R0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogQ2FudmFzT2JqZWN0
KGN0eCkKICAgICAsIGN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZChmYWxzZSkKQEAgLTQ5LDEz
ICs0NCw2IEBAIFdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW4KICAgICBz
ZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVUZXh0dXJlKCkp
OwogfQogCi1XZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGN0eCwgUGxhdGZvcm0zRE9iamVjdCBvYmopCi0gICAgOiBDYW52YXNPYmplY3QoY3R4KQotICAg
ICwgY3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKQotewotICAgIHNldE9iamVjdChv
YmosIGZhbHNlKTsKLX0KLQogdm9pZCBXZWJHTFRleHR1cmU6Ol9kZWxldGVPYmplY3QoUGxhdGZv
cm0zRE9iamVjdCBvYmplY3QpCiB7CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5kZWxldGVUZXh0dXJlKG9iamVjdCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
VGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJl
LmgJKHJldmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2aXJ0dWFsIH5XZWJHTFRleHR1cmUoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKTsKLSAgICAKLSAgICAgICAgLy8gRm9yIHF1ZXJ5aW5nIHByZXZp
b3VzbHkgY3JlYXRlZCBvYmplY3RzIHZpYSBlLmcuIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcgotICAgICAgICAvLyBGSVhNRTogc2hvdWxkIGNvbnNpZGVyIGNhbm9uaWNhbGl6aW5n
IHRoZXNlIG9iamVjdHMKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBj
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgUGxhdGZvcm0zRE9iamVjdCk7CiAKICAgICAg
ICAgYm9vbCBpc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgpIHsKICAgICAgICAgICAgIHJl
dHVybiBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQ7CkBAIC01MywxMSArNDksMTIgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFRleHR1cmUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgICAgIFdlYkdMVGV4dHVyZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIHByaXZhdGU6CisgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAgICAg
ICAgYm9vbCBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQ7CiAgICAgfTsKICAgICAKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU4NTIxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMjkgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGUgb3JpZ2lu
YWwgV2ViR0xUZXh0dXJlL1dlYkdMUmVuZGVyYnVmZmVyIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3
IG9uZXMgc2hhcmluZyBuYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM4MjM2CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1vYmpl
Y3QtZ2V0LWNhbGxzLWV4cGVjdGVkLnR4dDogQ2hlY2sgaWYgZ2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyIHJldHVybiBhIHRleHR1cmUvcmVuZGVyYnVmZmVyIHRoYXQgbWF0Y2hlcyB0
aGUgb3JpZ2luYWwgb25lLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0
cy9nbC1vYmplY3QtZ2V0LWNhbGxzLmpzOiBEaXR0by4KKwogMjAxMC0wNC0yOSAgRGltaXRyaSBH
bGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGV4
cGVjdGF0aW9ucyB0d2Vhay4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ds
LW9iamVjdC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2dsLW9iamVjdC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiA1ODUyMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLW9iamVjdC1n
ZXQtY2FsbHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMywxMSArMTMsMTEgQEAg
UEFTUyBnbC5nZXRFcnJvcigpIGlzIDAKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyAwCiBQQVNTIGds
LmdldEVycm9yKCkgaXMgMAogUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFKSBpcyBnbC5URVhUVVJFCi1QQVNTIGdsLmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpIGlzIG5vbi1udWxsLgor
UEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIs
IGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9O
QU1FKSBpcyB0ZXh0dXJlCiBQQVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9MRVZFTCkgaXMgMAogUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFj
aG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSkgaXMgMAogUEFTUyBn
bC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRF
UFRIX0FUVEFDSE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpIGlz
IGdsLlJFTkRFUkJVRkZFUgotUEFTUyBnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX05BTUUpIGlzIG5vbi1udWxsLgorUEFTUyBnbC5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX0FUVEFDSE1FTlQs
IGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpIGlzIHJlbmRlcmJ1ZmZlcgog
UEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHN0YW5kYXJkUHJvZ3JhbSwgZ2wuREVMRVRFX1NU
QVRVUykgaXMgZmFsc2UKIFBBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzdGFuZGFyZFByb2dy
YW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCiBQQVNTIHR5cGVvZiBnbC5nZXRQcm9ncmFtUGFy
YW1ldGVyKHN0YW5kYXJkUHJvZ3JhbSwgZ2wuVkFMSURBVEVfU1RBVFVTKSBpcyAiYm9vbGVhbiIK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9nbC1vYmpl
Y3QtZ2V0LWNhbGxzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3NjcmlwdC10ZXN0cy9nbC1vYmplY3QtZ2V0LWNhbGxzLmpzCShyZXZpc2lvbiA1ODUyMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3NjcmlwdC10ZXN0cy9nbC1vYmplY3Qt
Z2V0LWNhbGxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMiArNjIsMTIgQEAgZ2wuZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJBTUVCVUZGRQogLy8gcGFyYW1ldGVycyB0byB0aGlzIG9u
ZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTg0My4KIC8v
c2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2ds
LkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CiBzaG91bGRCZSgnZ2wuZ2V0RnJhbWVidWZmZXJBdHRh
Y2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wu
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSknLCAnZ2wuVEVYVFVSRScpOwotc2hv
dWxkQmVOb25OdWxsKCdnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJB
TUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9OQU1FKScpOworc2hvdWxkQmUoJ2dsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpJywgJ3RleHR1cmUnKTsKIHNob3VsZEJlKCdnbC5n
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9S
X0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwpJywg
JzAnKTsKIHNob3VsZEJlKCdnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wu
RlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSknLCAnMCcpOwogCiBzaG91bGRCZSgnZ2wuZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRB
Q0hNRU5ULCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKScsICdnbC5SRU5E
RVJCVUZGRVInKTsKLXNob3VsZEJlTm9uTnVsbCgnZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FKScpOworc2hvdWxkQmUoJ2dsLmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVO
VCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSknLCAncmVuZGVyYnVmZmVy
Jyk7CiAKIC8vIFRlc3QgZ2V0UHJvZ3JhbVBhcmFtZXRlcgogc2hvdWxkQmUoJ2dsLmdldFByb2dy
YW1QYXJhbWV0ZXIoc3RhbmRhcmRQcm9ncmFtLCBnbC5ERUxFVEVfU1RBVFVTKScsICdmYWxzZScp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55025</attachid>
            <date>2010-05-04 10:13:05 -0700</date>
            <delta_ts>2010-05-04 17:30:43 -0700</delta_ts>
            <desc>revised patch: responding to Ken Russell&apos;s review</desc>
            <filename>same.patch</filename>
            <type>text/plain</type>
            <size>17692</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDQtMjkgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgc2hvdWxkIHJldHVybiB0aGUgb3JpZ2luYWwgV2Vi
R0xUZXh0dXJlL1dlYkdMUmVuZGVyYnVmZmVyIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMg
c2hhcmluZyBuYW1lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4MjM2CisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaDogQWRk
IHR5cGUgY2hlY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojpp
c0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNPYmplY3Q6OmlzRnJhbWVidWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojppc1Byb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzT2JqZWN0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNPYmplY3Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc09iamVj
dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOiBBZGQg
dHlwZSBjaGVjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6aXNC
dWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogQWRkIHR5
cGUgY2hlY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6
aXNGcmFtZWJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmg6IEFk
ZCB0eXBlIGNoZWNrIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6
aXNQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6
IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmg6IEFkZCB0eXBlIGNoZWNrIGZ1bmN0aW9uczsgcmVt
b3ZlIGNvbnN0cnVjdG9yIHVzaW5nIGV4aXN0aW5nIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmJ1ZmZlcjo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcik6IFJldHVybiBv
cmlnaW5hbCBUZXh0dXJlL1JlbmRlcmJ1ZmZlciBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVz
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kVGV4dHVyZSk6
IEZpbmQgYSBXZWJHTFRleHR1cmUgdXNpbmcgYSBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpmaW5kUmVuZGVyYnVmZmVyKTogRmluZCBhIFdlYkdMUmVuZGVy
YnVmZmVyIHVzaW5nIGEgbmFtZS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaDogQWRkIGZpbmQqIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFNoYWRlci5oOiBBZGQgdHlwZSBjaGVjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFNoYWRlcjo6aXNTaGFkZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHA6IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOiBBZGQgdHlwZSBjaGVjayBmdW5jdGlvbnM7
IHJlbW92ZSBjb25zdHJ1Y3RvciB1c2luZyBleGlzdGluZyBuYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xUZXh0dXJlOjppc1RleHR1cmUpOgorCiAyMDEwLTA0LTI4ICBEaW1pdHJpIEdsYXpr
b3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmgJKHJldmlzaW9uIDU4NTIw
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNTEsNiArNTEsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQogCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZyYW1lYnVmZmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NoYWRlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBDYW52YXNPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpID0gMDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHJl
dmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvKTsKICAgICAKICAg
ICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKICAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IG1fZWxlbWVudEFy
cmF5QnVmZmVyOwogICAgICAgICB1bnNpZ25lZCBtX2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5n
dGg7CiAgICAgICAgIHVuc2lnbmVkIG1fYXJyYXlCdWZmZXJCeXRlTGVuZ3RoOwpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDU4NTIwKQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdmlydHVh
bCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKLSAgICAgIHByaXZhdGU6
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzRnJhbWVidWZmZXIoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisKICAgICAgICAgYm9vbCBtX2lzRGVwdGhBdHRhY2hlZDsKICAg
ICAgICAgYm9vbCBtX2lzU3RlbmNpbEF0dGFjaGVkOwogICAgICAgICBib29sIG1faXNEZXB0aFN0
ZW5jaWxBdHRhY2hlZDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkocmV2aXNp
b24gNTg1MjApCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxMyArNDUsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBi
b29sIGNhY2hlQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CiAgICAgICAgIGludCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMoKTsKICAgICAgICAgaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGlu
dCBpbmRleCk7Ci0gICAgICAgIAorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFByb2dy
YW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIHByaXZhdGU6CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1Byb2dyYW0oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKICAg
ICAgICAgVmVjdG9yPGludD4gbV9hY3RpdmVBdHRyaWJMb2NhdGlvbnM7CiAgICAgfTsKICAgICAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCShyZXZpc2lv
biA1ODUyMCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsNiBAQCBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVm
ZmVyPiBXZWJHTFJlbmRlCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFJlbmRlcmJ1ZmZl
cihjdHgpKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJi
dWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgUGxhdGZvcm0zRE9iamVj
dCBvYmopCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFJlbmRlcmJ1ZmZlcihjdHgs
IG9iaikpOwotfQotCiBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCiAgICAgOiBDYW52YXNPYmplY3QoY3R4KQogICAgICwgbV9p
bnRlcm5hbGZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQpCkBAIC00OSwxMyArNDQsNiBA
QCBXZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViCiAgICAgc2V0T2JqZWN0
KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOwog
fQogCi1XZWJHTFJlbmRlcmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjdHgsIFBsYXRmb3JtM0RPYmplY3Qgb2JqKQotICAgIDogQ2FudmFzT2JqZWN0KGN0
eCkKLSAgICAsIG1faW50ZXJuYWxmb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQotewot
ICAgIHNldE9iamVjdChvYmosIGZhbHNlKTsKLX0KLQogdm9pZCBXZWJHTFJlbmRlcmJ1ZmZlcjo6
X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVJlbmRlcmJ1ZmZlcihvYmplY3QpOwpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkocmV2aXNpb24gNTg1MjApCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDIxICszOCwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
fldlYkdMUmVuZGVyYnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQogICAgICAgICAKICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZvciBxdWVyeWluZyBwcmV2aW91
c2x5IGNyZWF0ZWQgb2JqZWN0cyB2aWEgZS5nLiBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXIKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCBjb25zaWRlciBjYW5vbmljYWxpemluZyB0
aGVzZSBvYmplY3RzCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJi
dWZmZXIpOwogCiAgICAgICAgIHZvaWQgc2V0SW50ZXJuYWxmb3JtYXQodW5zaWduZWQgbG9uZyBp
bnRlcm5hbGZvcm1hdCkgeyBtX2ludGVybmFsZm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7IH0KICAg
ICAgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbGZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW50ZXJuYWxmb3JtYXQ7IH0KIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7Ci0gICAgICAgIFdlYkdMUmVuZGVyYnVmZmVy
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFBsYXRmb3JtM0RPYmplY3QpOwogICAgICAgICAKICAg
ICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAKLSAg
ICAgIHByaXZhdGU6CisgICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
YnVmZmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bV9pbnRlcm5hbGZvcm1hdDsKICAgICB9OwogICAgIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTg1MjApCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk3OSwxOCArOTc5LDExIEBAIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEYKICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFLCAmdHlwZSk7CiAgICAgICAgIGludCB2YWx1ZSA9IDA7CiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFy
Z2V0LCBhdHRhY2htZW50LCBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRSwgJnZhbHVlKTsKLSAgICAgICAgLy8gRklYTUU6IHNob3VsZCBjb25zaWRl
ciBjYW5vbmljYWxpemluZyB0aGVzZSBvYmplY3RzCiAgICAgICAgIHN3aXRjaCAodHlwZSkgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVI6IHsKLSAgICAgICAg
ICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gdG1wID0gV2ViR0xSZW5kZXJidWZmZXI6OmNy
ZWF0ZSh0aGlzLCB2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRPYmplY3QodG1wLmdldCgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZl
cj4odG1wKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTogewotICAgICAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdG1wID0gV2ViR0xUZXh0
dXJlOjpjcmVhdGUodGhpcywgdmFsdWUpOwotICAgICAgICAgICAgYWRkT2JqZWN0KHRtcC5nZXQo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0
dXJlPih0bXApKTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVI6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGZpbmRSZW5kZXJi
dWZmZXIoc3RhdGljX2Nhc3Q8UGxhdGZvcm0zRE9iamVjdD4odmFsdWUpKSk7CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkU6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGZpbmRUZXh0dXJlKHN0YXRpY19jYXN0PFBsYXRmb3JtM0RPYmplY3Q+KHZhbHVlKSkp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gRklYTUU6IHJhaXNlIGV4Y2VwdGlv
bj8KICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKQEAgLTI4NDMsNiArMjgzNiwz
MCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtCiAgICAgbV9jYW52
YXNPYmplY3RzLmNsZWFyKCk7CiB9CiAKK1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZpbmRUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAg
IEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVjdD4gPjo6aXRlcmF0b3IgcGVuZCA9IG1fY2FudmFz
T2JqZWN0cy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPENhbnZhc09iamVjdD4gPjo6
aXRlcmF0b3IgaXQgPSBtX2NhbnZhc09iamVjdHMuYmVnaW4oKTsgaXQgIT0gcGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoKCppdCktPmlzVGV4dHVyZSgpICYmICgqaXQpLT5vYmplY3QoKSA9PSBv
YmopIHsKKyAgICAgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViR0xUZXh0dXJlKj4oKCppdCkuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHRl
eC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluZFJlbmRl
cmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxDYW52
YXNPYmplY3Q+ID46Oml0ZXJhdG9yIHBlbmQgPSBtX2NhbnZhc09iamVjdHMuZW5kKCk7CisgICAg
Zm9yIChIYXNoU2V0PFJlZlB0cjxDYW52YXNPYmplY3Q+ID46Oml0ZXJhdG9yIGl0ID0gbV9jYW52
YXNPYmplY3RzLmJlZ2luKCk7IGl0ICE9IHBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKCgqaXQp
LT5pc1JlbmRlcmJ1ZmZlcigpICYmICgqaXQpLT5vYmplY3QoKSA9PSBvYmopIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxX
ZWJHTFJlbmRlcmJ1ZmZlcio+KCgqaXQpLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBidWZm
ZXIucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBXZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKHVuc2ln
bmVkIGxvbmcgcG5hbWUpCiB7CiAgICAgdW5zaWduZWQgY2hhciB2YWx1ZTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNTg1MjAp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTksNiArMjk5LDggQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogCiAgICAg
ICAgIHZvaWQgYWRkT2JqZWN0KENhbnZhc09iamVjdCopOwogICAgICAgICB2b2lkIGRldGFjaEFu
ZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGZp
bmRUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMUmVu
ZGVyYnVmZmVyPiBmaW5kUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgICAg
IHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7CiAgICAgICAgIHZvaWQgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGJvb2wgY2hhbmdlZCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJ
KHJldmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIH5XZWJHTFNoYWRlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0M0Q6OldlYkdMRW51bVR5cGUpOwotICAgICAg
ICAKKwogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCosIEdyYXBoaWNzQ29udGV4dDNEOjpXZWJHTEVudW1UeXBlKTsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKworICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKICAgICAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xU
ZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVy
ZS5jcHAJKHJldmlzaW9uIDU4NTIwKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMSArMzcsNiBAQCBQYXNzUmVmUHRyPFdlYkdM
VGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFRl
eHR1cmUoY3R4KSk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6
OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgUGxhdGZvcm0zRE9iamVjdCBvYmop
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFRleHR1cmUoY3R4LCBvYmopKTsKLX0K
LQogV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgp
CiAgICAgOiBDYW52YXNPYmplY3QoY3R4KQogICAgICwgY3ViZU1hcFJXcmFwTW9kZUluaXRpYWxp
emVkKGZhbHNlKQpAQCAtNDksMTMgKzQ0LDYgQEAgV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUo
V2ViR0xSZW5kZXJpbgogICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNE
KCktPmNyZWF0ZVRleHR1cmUoKSk7CiB9CiAKLVdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY3R4LCBQbGF0Zm9ybTNET2JqZWN0IG9iaikKLSAgICA6IENh
bnZhc09iamVjdChjdHgpCi0gICAgLCBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQoZmFsc2Up
Ci17Ci0gICAgc2V0T2JqZWN0KG9iaiwgZmFsc2UpOwotfQotCiB2b2lkIFdlYkdMVGV4dHVyZTo6
X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKIHsKICAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVRleHR1cmUob2JqZWN0KTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNpb24gNTg1MjApCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgfldlYkdMVGV4dHVyZSgpIHsgZGVs
ZXRlT2JqZWN0KCk7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
VGV4dHVyZT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwotICAgIAotICAgICAgICAv
LyBGb3IgcXVlcnlpbmcgcHJldmlvdXNseSBjcmVhdGVkIG9iamVjdHMgdmlhIGUuZy4gZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyCi0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgY29u
c2lkZXIgY2Fub25pY2FsaXppbmcgdGhlc2Ugb2JqZWN0cwotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBQbGF0Zm9y
bTNET2JqZWN0KTsKIAogICAgICAgICBib29sIGlzQ3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVk
KCkgewogICAgICAgICAgICAgcmV0dXJuIGN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZDsKQEAg
LTUzLDExICs0OSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIFdlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKLSAgICAgICAgV2Vi
R0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFBsYXRmb3JtM0RPYmplY3QpOwogCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOwogCiAg
ICAgcHJpdmF0ZToKKyAgICAgICAgdmlydHVhbCBib29sIGlzVGV4dHVyZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKwogICAgICAgICBib29sIGN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZDsK
ICAgICB9OwogICAgIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTg1MjEpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNC0yOSAgWmhl
bnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciBzaG91
bGQgcmV0dXJuIHRoZSBvcmlnaW5hbCBXZWJHTFRleHR1cmUvV2ViR0xSZW5kZXJidWZmZXIgaW5z
dGVhZCBvZiBjcmVhdGluZyBuZXcgb25lcyBzaGFyaW5nIG5hbWVzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzgyMzYKKworICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL2dsLW9iamVjdC1nZXQtY2FsbHMtZXhwZWN0ZWQudHh0OiBDaGVjayBpZiBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIgcmV0dXJuIGEgdGV4dHVyZS9yZW5kZXJi
dWZmZXIgdGhhdCBtYXRjaGVzIHRoZSBvcmlnaW5hbCBvbmUuCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanM6IERpdHRvLgorCiAy
MDEwLTA0LTI5ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgZXhwZWN0YXRpb25zIHR3ZWFrLgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvZ2wtb2JqZWN0LWdldC1jYWxscy1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtb2JqZWN0LWdldC1jYWxs
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU4NTIwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvZ2wtb2JqZWN0LWdldC1jYWxscy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEzLDExICsxMywxMSBAQCBQQVNTIGdsLmdldEVycm9yKCkgaXMgMAogUEFTUyBnbC5nZXRF
cnJvcigpIGlzIDAKIFBBU1MgZ2wuZ2V0RXJyb3IoKSBpcyAwCiBQQVNTIGdsLmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVO
VDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUpIGlzIGdsLlRFWFRVUkUK
LVBBU1MgZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVS
LCBnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
TkFNRSkgaXMgbm9uLW51bGwuCitQQVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpIGlzIHRleHR1cmUKIFBBU1MgZ2wuZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hNRU5U
MCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMKSBpcyAwCiBQQVNTIGds
LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09M
T1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01B
UF9GQUNFKSBpcyAwCiBQQVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihn
bC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRSkgaXMgZ2wuUkVOREVSQlVGRkVSCi1QQVNTIGdsLmdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuREVQVEhfQVRUQUNITUVO
VCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSkgaXMgbm9uLW51bGwuCitQ
QVNTIGdsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwg
Z2wuREVQVEhfQVRUQUNITUVOVCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFN
RSkgaXMgcmVuZGVyYnVmZmVyCiBQQVNTIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoc3RhbmRhcmRQ
cm9ncmFtLCBnbC5ERUxFVEVfU1RBVFVTKSBpcyBmYWxzZQogUEFTUyBnbC5nZXRQcm9ncmFtUGFy
YW1ldGVyKHN0YW5kYXJkUHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKIFBBU1MgdHlw
ZW9mIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIoc3RhbmRhcmRQcm9ncmFtLCBnbC5WQUxJREFURV9T
VEFUVVMpIGlzICJib29sZWFuIgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
c2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2NyaXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMu
anMJKHJldmlzaW9uIDU4NTIwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvc2Ny
aXB0LXRlc3RzL2dsLW9iamVjdC1nZXQtY2FsbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTYyLDEy
ICs2MiwxMiBAQCBnbC5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihnbC5GUkFNRUJVRkZFCiAvLyBw
YXJhbWV0ZXJzIHRvIHRoaXMgb25lLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTMxODQzLgogLy9zaG91bGRCZSgnZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUnKTsKIHNob3VsZEJlKCdn
bC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNP
TE9SX0FUVEFDSE1FTlQwLCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKScs
ICdnbC5URVhUVVJFJyk7Ci1zaG91bGRCZU5vbk51bGwoJ2dsLmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpJyk7CitzaG91bGRCZSgnZ2wuZ2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRB
Q0hNRU5UMCwgZ2wuRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSknLCAndGV4dHVy
ZScpOwogc2hvdWxkQmUoJ2dsLmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihnbC5G
UkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9MRVZFTCknLCAnMCcpOwogc2hvdWxkQmUoJ2dsLmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGds
LkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFKScsICcwJyk7CiAK
IHNob3VsZEJlKCdnbC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVC
VUZGRVIsIGdsLkRFUFRIX0FUVEFDSE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX1RZUEUpJywgJ2dsLlJFTkRFUkJVRkZFUicpOwotc2hvdWxkQmVOb25OdWxsKCdnbC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkRFUFRIX0FU
VEFDSE1FTlQsIGdsLkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUpJyk7CitzaG91
bGRCZSgnZ2wuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVS
LCBnbC5ERVBUSF9BVFRBQ0hNRU5ULCBnbC5GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9O
QU1FKScsICdyZW5kZXJidWZmZXInKTsKIAogLy8gVGVzdCBnZXRQcm9ncmFtUGFyYW1ldGVyCiBz
aG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzdGFuZGFyZFByb2dyYW0sIGdsLkRFTEVU
RV9TVEFUVVMpJywgJ2ZhbHNlJyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>