<?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>41108</bug_id>
          
          <creation_ts>2010-06-23 15:21:05 -0700</creation_ts>
          <short_desc>A buffer should be bound to one target in its lifetime</short_desc>
          <delta_ts>2010-06-28 10:43:48 -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>
          
          <blocked>41092</blocked>
          <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>kbr</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242116</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-23 15:21:05 -0700</bug_when>
    <thetext>In WebGL, an attempt to bind a buffer to another target will generate INVALID_OPERATION.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242120</commentid>
    <comment_count>1</comment_count>
      <attachid>59568</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-23 15:25:48 -0700</bug_when>
    <thetext>Created attachment 59568
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242173</commentid>
    <comment_count>2</comment_count>
      <attachid>59568</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-23 17:22:52 -0700</bug_when>
    <thetext>Comment on attachment 59568
patch

Generally looks good. One comment which will require another revision.


WebCore/html/canvas/WebGLBuffer.h:71
 +          unsigned m_arrayBufferByteLength;
These two byte lengths can be collapsed into one now. This should simplify the logic above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242178</commentid>
    <comment_count>3</comment_count>
      <attachid>59587</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-23 17:37:03 -0700</bug_when>
    <thetext>Created attachment 59587
revised patch : responding to kbr&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242187</commentid>
    <comment_count>4</comment_count>
      <attachid>59587</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-23 17:49:26 -0700</bug_when>
    <thetext>Comment on attachment 59587
revised patch : responding to kbr&apos;s review

This looks good; nice cleanup. However I just noticed there&apos;s a typo in one comment which makes it really confusing.


WebCore/html/canvas/WebGLBuffer.cpp:149
 +      // In WebGL, a buffer is bound to its target in its lifetime
should read &quot;one target in its lifetime&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242552</commentid>
    <comment_count>5</comment_count>
      <attachid>59664</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-06-24 09:40:08 -0700</bug_when>
    <thetext>Created attachment 59664
revised patch: fixed the typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242556</commentid>
    <comment_count>6</comment_count>
      <attachid>59664</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-24 09:54:12 -0700</bug_when>
    <thetext>Comment on attachment 59664
revised patch: fixed the typo

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243306</commentid>
    <comment_count>7</comment_count>
      <attachid>59664</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-25 19:47:55 -0700</bug_when>
    <thetext>Comment on attachment 59664
revised patch: fixed the typo

Clearing flags on attachment: 59664

Committed r61934: &lt;http://trac.webkit.org/changeset/61934&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243307</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-25 19:48:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59568</attachid>
            <date>2010-06-23 15:25:48 -0700</date>
            <delta_ts>2010-06-23 17:37:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>buffer.patch</filename>
            <type>text/plain</type>
            <size>16943</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJ1ZmZl
ciBzaG91bGQgYmUgYm91bmQgdG8gb25lIHRhcmdldCBpbiBpdHMgbGlmZXRpbWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTA4CisKKyAgICAgICAg
VGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1
ZmZlcjo6V2ViR0xCdWZmZXIpOiBJbml0IHRhcmdldCB0byAwLiAKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKTogUmVtb3ZlIHRhcmdldCBwYXJhbWV0
ZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OmJ5dGVMZW5ndGgpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpzZXRUYXJnZXQpOiBTZXQgdGFy
Z2V0LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmg6IENhY2hlIHRhcmdldCBp
biB0aGUgV2ViR0xCdWZmZXIgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6
OmdldFRhcmdldCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZl
cik6IENoZWNrIGlmIGEgYnVmZmVyIGlzIGJvdW5kIHRvIGFub3RoZXIgdGFyZ2V0OyBzZXQgYnVm
ZmVyIG9iamVjdCBpbnRlcm5hbCB0YXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEpOiBSZW1vdmUgdGFyZ2V0IHBhcmFtZXRlciBhbmQgdXNl
IHRoZSBXZWJHTEJ1ZmZlciBjYWNoZWQgdGFyZ2V0IGluc3RlYWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXpl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKTogRGl0dG8uCisKIDIwMTAt
MDYtMjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmNwcAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlCiAKIFdlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICA6IENhbnZhc09iamVjdChjdHgpCisgICAgLCBt
X3RhcmdldCgwKQogICAgICwgbV9lbGVtZW50QXJyYXlCdWZmZXJCeXRlTGVuZ3RoKDApCiAgICAg
LCBtX2FycmF5QnVmZmVyQnl0ZUxlbmd0aCgwKQogICAgICwgbV9uZXh0QXZhaWxhYmxlQ2FjaGVF
bnRyeSgwKQpAQCAtNTIsMTQgKzUzLDE3IEBAIHZvaWQgV2ViR0xCdWZmZXI6Ol9kZWxldGVPYmpl
Y3QoUGxhdGZvcm0KICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1
ZmZlcihvYmplY3QpOwogfQogCi1ib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRh
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29j
aWF0ZUJ1ZmZlckRhdGEoaW50IHNpemUpCiB7Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKyAgICBpZiAoIW1fdGFyZ2V0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSB7CiAgICAgICAgIG1fZWxlbWVudEFycmF5QnVmZmVy
Qnl0ZUxlbmd0aCA9IHNpemU7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAKLSAg
ICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpIHsKKworICAg
IGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKSB7CiAgICAg
ICAgIG1fYXJyYXlCdWZmZXJCeXRlTGVuZ3RoID0gc2l6ZTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtNjcsMTIgKzcxLDE0IEBAIGJvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1
ZmZlckRhdGEodW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgV2ViR0xCdWZmZXI6OmFz
c29jaWF0ZUJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyog
YXJyYXkpCitib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKEFycmF5QnVmZmVy
VmlldyogYXJyYXkpCiB7CisgICAgaWYgKCFtX3RhcmdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmICghYXJyYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
aWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsK
KworICAgIGlmIChtX3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVIpIHsKICAgICAgICAgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAgICAgICAgIG1fZWxl
bWVudEFycmF5QnVmZmVyQnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3RoKCk7CiAgICAgICAg
IC8vIFdlIG11c3QgYWx3YXlzIGNsb25lIHRoZSBpbmNvbWluZyBkYXRhIGJlY2F1c2UgY2xpZW50
LXNpZGUKQEAgLTgxLDggKzg3LDggQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVy
RGF0YSh1bgogICAgICAgICBtX2VsZW1lbnRBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGUoYXJyYXktPmJ1ZmZlcigpLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQot
ICAgIAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikg
eworCisgICAgaWYgKG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIp
IHsKICAgICAgICAgbV9hcnJheUJ1ZmZlckJ5dGVMZW5ndGggPSBhcnJheS0+Ynl0ZUxlbmd0aCgp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC05MCwxMiArOTYsMTQgQEAgYm9vbCBX
ZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyRGF0YSh1bgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpCitib29sIFdlYkdM
QnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhKGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZp
ZXcqIGFycmF5KQogeworICAgIGlmICghbV90YXJnZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICBpZiAoIWFycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSB7CisK
KyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSKSB7CiAgICAgICAgIGNsZWFyQ2FjaGVkTWF4SW5kaWNlcygpOwogCiAgICAgICAgIC8vIFdl
IG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3cgd2l0aCB0aGVzZSB0ZXN0
cwpAQCAtMTA5LDE2ICsxMTcsMTggQEAgYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVmZmVy
U3ViRGF0YQogICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fZWxl
bWVudEFycmF5QnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0LCBhcnJheS0+YmFzZUFkZHJlc3MoKSwg
YXJyYXktPmJ5dGVMZW5ndGgoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICAK
LSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpCisKKyAg
ICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKICAgICAg
ICAgcmV0dXJuIGFycmF5LT5ieXRlTGVuZ3RoKCkgKyBvZmZzZXQgPD0gbV9hcnJheUJ1ZmZlckJ5
dGVMZW5ndGg7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXVuc2lnbmVkIFdlYkdMQnVmZmVy
OjpieXRlTGVuZ3RoKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KSBjb25zdAordW5zaWduZWQgV2ViR0xC
dWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiAodGFyZ2V0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpID8gbV9hcnJheUJ1ZmZlckJ5dGVMZW5ndGggOiBt
X2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGg7CisgICAgaWYgKCFtX3RhcmdldCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIChtX3RhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSKSA/IG1fYXJyYXlCdWZmZXJCeXRlTGVuZ3RoIDogbV9lbGVtZW50QXJyYXlC
dWZmZXJCeXRlTGVuZ3RoOwogfQogCiBsb25nIFdlYkdMQnVmZmVyOjpnZXRDYWNoZWRNYXhJbmRl
eCh1bnNpZ25lZCBsb25nIHR5cGUpCkBAIC0xNDMsNiArMTUzLDE1IEBAIHZvaWQgV2ViR0xCdWZm
ZXI6OnNldENhY2hlZE1heEluZGV4KHVuc2kKICAgICBtX25leHRBdmFpbGFibGVDYWNoZUVudHJ5
ID0gKG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnkgKyAxKSAlIG51bUVudHJpZXM7CiB9CiAKK3Zv
aWQgV2ViR0xCdWZmZXI6OnNldFRhcmdldCh1bnNpZ25lZCBsb25nIHRhcmdldCkKK3sKKyAgICAv
LyBJbiBXZWJHTCwgYSBidWZmZXIgaXMgYm91bmQgdG8gaXRzIHRhcmdldCBpbiBpdHMgbGlmZXRp
bWUKKyAgICBpZiAobV90YXJnZXQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIgfHwgdGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgbV90YXJnZXQgPSB0YXJnZXQ7
Cit9CisKIHZvaWQgV2ViR0xCdWZmZXI6OmNsZWFyQ2FjaGVkTWF4SW5kaWNlcygpCiB7CiAgICAg
bWVtc2V0KG1fbWF4SW5kZXhDYWNoZSwgMCwgc2l6ZW9mKG1fbWF4SW5kZXhDYWNoZSkpOwpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogCi0gICAg
ICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNp
emUpOwotICAgICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpOwotICAgICAgICBib29sIGFzc29jaWF0ZUJ1ZmZl
clN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZp
ZXcqIGFycmF5KTsKKyAgICAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKGludCBzaXplKTsK
KyAgICAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEFycmF5QnVmZmVyVmlldyogYXJyYXkp
OworICAgICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEobG9uZyBvZmZzZXQsIEFycmF5
QnVmZmVyVmlldyogYXJyYXkpOwogICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0
aCh1bnNpZ25lZCBsb25nIHRhcmdldCkgY29uc3Q7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5n
dGgoKSBjb25zdDsKICAgICAgICAgY29uc3QgQXJyYXlCdWZmZXIqIGVsZW1lbnRBcnJheUJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOyB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgLy8gR2V0cyB0aGUgY2FjaGVkIG1heCBpbmRleCBm
b3IgdGhlIGdpdmVuIHR5cGUuIFJldHVybnMgLTEgaWYKQEAgLTUzLDYgKzUzLDkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAvLyBTZXRzIHRoZSBjYWNoZWQgbWF4IGluZGV4IGZvciB0
aGUgZ2l2ZW4gdHlwZS4KICAgICAgICAgdm9pZCBzZXRDYWNoZWRNYXhJbmRleCh1bnNpZ25lZCBs
b25nIHR5cGUsIGxvbmcgdmFsdWUpOwogCisgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2V0VGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICAgICAgdm9pZCBzZXRUYXJnZXQodW5z
aWduZWQgbG9uZyk7CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFdlYkdMQnVmZmVyKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOwogCkBAIC02MSw2ICs2NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX3RhcmdldDsKKwogICAg
ICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fZWxlbWVudEFycmF5QnVmZmVyOwogICAgICAgICB1
bnNpZ25lZCBtX2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGg7CiAgICAgICAgIHVuc2lnbmVk
IG1fYXJyYXlCdWZmZXJCeXRlTGVuZ3RoOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIy
OCw2ICsyMjgsMTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodQog
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0
KSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKICAgICAgICAgbV9i
b3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwpAQCAtMjM5LDYgKzI0Myw4IEBAIHZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKHUKICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGJ1ZmZl
ci0+c2V0VGFyZ2V0KHRhcmdldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKIH0KIApAQCAtMzM0LDEyICszNDAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJ1ZmZlckRhdGEodQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgbV9ib3VuZEVsZW1l
bnRBcnJheUJ1ZmZlcikgewotICAgICAgICBpZiAoIW1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIt
PmFzc29jaWF0ZUJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplKSkgeworICAgICAgICBpZiAoIW1fYm91
bmRFbGVtZW50QXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc2l6ZSkpIHsKICAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiBtX2JvdW5k
QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0
ZUJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplKSkgeworICAgICAgICBpZiAoIW1fYm91bmRBcnJheUJ1
ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShzaXplKSkgewogICAgICAgICAgICAgbV9jb250ZXh0
LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM1NiwxMiArMzYyLDEyIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHUKIHsKICAgICBVTlVTRURfUEFSQU0o
ZWMpOwogICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlf
QlVGRkVSICYmIG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2Jv
dW5kRWxlbWVudEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHRhcmdldCwgZGF0YSkp
IHsKKyAgICAgICAgaWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZm
ZXJEYXRhKGRhdGEpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIgJiYgbV9ib3VuZEFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGlmICghbV9ib3Vu
ZEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHRhcmdldCwgZGF0YSkpIHsKKyAgICAg
ICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsK
ICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0z
NzgsMTIgKzM4NCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0
CiB7CiAgICAgVU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiAmJiBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVy
KSB7Ci0gICAgICAgIGlmICghbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+YXNzb2NpYXRlQnVm
ZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YSkpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5k
RWxlbWVudEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkp
IHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAm
JiBtX2JvdW5kQXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIt
PmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEpKSB7CisgICAgICAg
IGlmICghbV9ib3VuZEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwg
ZGF0YSkpIHsKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC02NzUsMTEgKzY4MSwxMSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVFbGVtCiAgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KICAg
ICAgICAgdW9mZnNldCAvPSAyOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRf
QVJSQVlfQlVGRkVSKSAvIDI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7CiAgICAgICAgIGlmICh1b2Zmc2V0ID4g
biB8fCBjb3VudCA+IG4gLSB1b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewot
ICAgICAgICB1bnNpZ25lZCBsb25nIG4gPSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRl
TGVuZ3RoKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUik7CisgICAgICAg
IHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KTsKICAgICAgICAgaWYgKHVvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIHVvZmZzZXQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNjk5LDE0ICs3MDUsMTQgQEAgYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZQogICAgICAgICAvLyBDb21wdXRlIHRo
ZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBv
ZiBpbmRleC4KICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1l
bnRzID0gbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aChHcmFwaGljc0NvbnRl
eHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5k
YXRhKCkpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRz
OyBpKyspCiAgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19j
YXN0PGxvbmc+KHBbaV0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRF
bGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7
CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCktPmRhdGEoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtRWxlbWVudHM7IGkrKykKICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8bG9uZz4ocFtpXSkpOwpAQCAtMzA5Miw3ICszMDk4LDcgQEAgdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYgogICAgIC8vIEF2b2lkIG9mZi1ieS1v
bmUgZXJyb3JzIGluIG51bUVsZW1lbnRzIGNvbXB1dGF0aW9uLgogICAgIC8vIEZvciB0aGUgbGFz
dCBlbGVtZW50LCB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQogICAgIC8vIGVs
ZW1lbnQgYW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgIGxvbmcgYnl0ZXNSZW1haW5pbmcgPSBt
X2JvdW5kQXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUikgLSBvZmZzZXQ7CisgICAgbG9uZyBieXRlc1JlbWFpbmluZyA9IG1fYm91bmRBcnJheUJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0OwogICAgIGlmIChieXRlc1JlbWFpbmluZyA8IGJ5
dGVzUGVyRWxlbWVudCkKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5udW1FbGVt
ZW50cyA9IDA7CiAgICAgZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE3MTApCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0y
MyAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgYnVmZmVyIHNob3VsZCBiZSBib3VuZCB0byBvbmUg
dGFyZ2V0IGluIGl0cyBsaWZldGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDExMDgKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2J1ZmZl
ci1iaW5kLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93
ZWJnbC9idWZmZXItYmluZC10ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA2LTIzICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmlkIEh5YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVy
LWJpbmQtdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9idWZmZXItYmluZC10ZXN0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorQ2hlY2tzIGEgYnVmZmVyIGNhbiBv
bmx5IGJlIGJvdW5kIHRvIDEgdGFyZ2V0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworQ2FudmFzLmdldENvbnRleHQKK1BBU1MgY29udGV4dCBleGlzdHMKKworUEFTUyBzaG91bGQg
YmUgYWJsZSB0byBiaW5kIGJ1ZmZlci4KK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8gdW5iaW5kIGJ1
ZmZlci4KK1BBU1Mgc2hvdWxkIGdldCBJTlZBTElEX09QRVJBVElPTiBpZiBhdHRlbXB0aW5nIHRv
IGJpbmQgYnVmZmVyIHRvIGRpZmZlcmVudCB0YXJnZXQKK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8g
YmluZCBidWZmZXIuCitQQVNTIHNob3VsZCBiZSBhYmxlIHRvIHVuYmluZCBidWZmZXIuCitQQVNT
IHNob3VsZCBnZXQgSU5WQUxJRF9PUEVSQVRJT04gaWYgYXR0ZW1wdGluZyB0byBiaW5kIGJ1ZmZl
ciB0byBkaWZmZXJlbnQgdGFyZ2V0CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9i
dWZmZXItYmluZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwg
NC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9v
c2UuZHRkIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+V2ViR0wgQmluZEJ1ZmZlciBj
b25mb3JtYW5jZSB0ZXN0LjwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBzdHlsZT0i
d2lkdGg6IDQwcHg7IGhlaWdodDogNDBweDsiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRp
b24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIkNoZWNrcyBhIGJ1ZmZlciBjYW4gb25seSBiZSBib3VuZCB0byAxIHRhcmdldC4iKTsKKwor
ZGVidWcoIiIpOworZGVidWcoIkNhbnZhcy5nZXRDb250ZXh0Iik7CisKK3ZhciBnbCA9IGNyZWF0
ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIikpOworaWYgKCFnbCkg
eworICB0ZXN0RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICB0
ZXN0UGFzc2VkKCJjb250ZXh0IGV4aXN0cyIpOworCisgIGRlYnVnKCIiKTsKKworICB2YXIgYnVm
ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBi
dWYpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAg
ICAgICJzaG91bGQgYmUgYWJsZSB0byBiaW5kIGJ1ZmZlci4iKTsKKyAgZ2wuYmluZEJ1ZmZlcihn
bC5BUlJBWV9CVUZGRVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5O
T19FUlJPUiwKKyAgICAgICAgICAgICJzaG91bGQgYmUgYWJsZSB0byB1bmJpbmQgYnVmZmVyLiIp
OworICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWYpOworICBhc3Nl
cnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAg
ICJzaG91bGQgZ2V0IElOVkFMSURfT1BFUkFUSU9OIGlmIGF0dGVtcHRpbmcgdG8gYmluZCBidWZm
ZXIgdG8gZGlmZmVyZW50IHRhcmdldCIpOworCisgIHZhciBidWYgPSBnbC5jcmVhdGVCdWZmZXIo
KTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmKTsKKyAgYXNz
ZXJ0TXNnKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCisgICAgICAgICAgICAic2hvdWxk
IGJlIGFibGUgdG8gYmluZCBidWZmZXIuIik7CisgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9B
UlJBWV9CVUZGRVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19F
UlJPUiwKKyAgICAgICAgICAgICJzaG91bGQgYmUgYWJsZSB0byB1bmJpbmQgYnVmZmVyLiIpOwor
ICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKKyAgYXNzZXJ0TXNnKGdsLmdl
dEVycm9yKCkgPT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAic2hvdWxkIGdl
dCBJTlZBTElEX09QRVJBVElPTiBpZiBhdHRlbXB0aW5nIHRvIGJpbmQgYnVmZmVyIHRvIGRpZmZl
cmVudCB0YXJnZXQiKTsKK30KKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorPC9zY3JpcHQ+CisKKzwvYm9k
eT4KKzwvaHRtbD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59587</attachid>
            <date>2010-06-23 17:37:03 -0700</date>
            <delta_ts>2010-06-24 09:40:08 -0700</delta_ts>
            <desc>revised patch : responding to kbr&apos;s review</desc>
            <filename>buffer.patch</filename>
            <type>text/plain</type>
            <size>17618</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJ1ZmZl
ciBzaG91bGQgYmUgYm91bmQgdG8gb25lIHRhcmdldCBpbiBpdHMgbGlmZXRpbWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTA4CisKKyAgICAgICAg
VGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1
ZmZlcjo6V2ViR0xCdWZmZXIpOiBJbml0IHRhcmdldCB0byAwLiAKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKTogUmVtb3ZlIHRhcmdldCBwYXJhbWV0
ZXIsIHVzZSBvbmUgYnl0ZUxlbmd0aCBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1
ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xCdWZmZXI6OmJ5dGVMZW5ndGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
QnVmZmVyOjpzZXRUYXJnZXQpOiBTZXQgdGFyZ2V0LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMQnVmZmVyLmg6IENhY2hlIHRhcmdldCBpbiB0aGUgV2ViR0xCdWZmZXIgb2JqZWN0LCB1c2Ug
b25lIGJ5dGVMZW5ndGggbWVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6Omdl
dFRhcmdldCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcik6
IENoZWNrIGlmIGEgYnVmZmVyIGlzIGJvdW5kIHRvIGFub3RoZXIgdGFyZ2V0OyBzZXQgYnVmZmVy
IG9iamVjdCBpbnRlcm5hbCB0YXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJ1ZmZlckRhdGEpOiBSZW1vdmUgdGFyZ2V0IHBhcmFtZXRlciBhbmQgdXNlIHRo
ZSBXZWJHTEJ1ZmZlciBjYWNoZWQgdGFyZ2V0IGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheUNvbnNlcnZhdGl2ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKTogRGl0dG8uCisKIDIwMTAtMDYt
MjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBQYXNzUmVmUHRyPFdlYkdMQnVm
ZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlCiAKIFdlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICA6IENhbnZhc09iamVjdChjdHgpCi0gICAgLCBtX2Vs
ZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGgoMCkKLSAgICAsIG1fYXJyYXlCdWZmZXJCeXRlTGVu
Z3RoKDApCisgICAgLCBtX3RhcmdldCgwKQorICAgICwgbV9ieXRlTGVuZ3RoKDApCiAgICAgLCBt
X25leHRBdmFpbGFibGVDYWNoZUVudHJ5KDApCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCkpOwpAQCAtNTIsNTAgKzUyLDUxIEBA
IHZvaWQgV2ViR0xCdWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0KICAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihvYmplY3QpOwogfQogCi1ib29sIFdl
YkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQg
c2l6ZSkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoaW50IHNpemUpCiB7
Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVIpIHsKLSAgICAgICAgbV9lbGVtZW50QXJyYXlCdWZmZXJCeXRlTGVuZ3RoID0gc2l6ZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgewotICAgICAgICBtX2FycmF5QnVmZmVyQnl0ZUxl
bmd0aCA9IHNpemU7CisgICAgc3dpdGNoIChtX3RhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUjoKKyAgICAgICAgbV9ieXRlTGVuZ3RoID0gc2l6ZTsKICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVm
ZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKK2Jv
b2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoQXJyYXlCdWZmZXJWaWV3KiBhcnJh
eSkKIHsKKyAgICBpZiAoIW1fdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFhcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgeworCisgICAgaWYg
KG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgewog
ICAgICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKLSAgICAgICAgbV9lbGVtZW50QXJyYXlC
dWZmZXJCeXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgbV9ieXRlTGVu
Z3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgY2xv
bmUgdGhlIGluY29taW5nIGRhdGEgYmVjYXVzZSBjbGllbnQtc2lkZQogICAgICAgICAvLyBtb2Rp
ZmljYXRpb25zIHdpdGhvdXQgY2FsbGluZyBidWZmZXJEYXRhIG9yIGJ1ZmZlclN1YkRhdGEKICAg
ICAgICAgLy8gbXVzdCBuZXZlciBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiByZXN1
bHRzLgogICAgICAgICBtX2VsZW1lbnRBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
YXJyYXktPmJ1ZmZlcigpLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgewot
ICAgICAgICBtX2FycmF5QnVmZmVyQnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3RoKCk7CisK
KyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgewor
ICAgICAgICBtX2J5dGVMZW5ndGggPSBhcnJheS0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdM
QnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25n
IG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29j
aWF0ZUJ1ZmZlclN1YkRhdGEobG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiB7
CisgICAgaWYgKCFtX3RhcmdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghYXJy
YXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgaWYgKHRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKworICAgIGlmIChtX3Rh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKICAgICAg
ICAgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBwcm90
ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdyB3aXRoIHRoZXNlIHRlc3RzCkBAIC0xMDMsMjIg
KzEwNCwyMiBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgdW5zaWduZWQgbG9u
ZyB1b2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ob2Zmc2V0KTsKLSAgICAgICAg
aWYgKHVvZmZzZXQgPiBtX2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGggfHwgYXJyYXktPmJ5
dGVMZW5ndGgoKSA+IG1fZWxlbWVudEFycmF5QnVmZmVyQnl0ZUxlbmd0aCAtIHVvZmZzZXQpCisg
ICAgICAgIGlmICh1b2Zmc2V0ID4gbV9ieXRlTGVuZ3RoIHx8IGFycmF5LT5ieXRlTGVuZ3RoKCkg
PiBtX2J5dGVMZW5ndGggLSB1b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgCiAgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9l
bGVtZW50QXJyYXlCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygp
LCBhcnJheS0+Ynl0ZUxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAg
ICAgICAgcmV0dXJuIGFycmF5LT5ieXRlTGVuZ3RoKCkgKyBvZmZzZXQgPD0gbV9hcnJheUJ1ZmZl
ckJ5dGVMZW5ndGg7CisKKyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUikKKyAgICAgICAgcmV0dXJuIGFycmF5LT5ieXRlTGVuZ3RoKCkgKyBvZmZzZXQg
PD0gbV9ieXRlTGVuZ3RoOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBXZWJH
TEJ1ZmZlcjo6Ynl0ZUxlbmd0aCh1bnNpZ25lZCBsb25nIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVk
IFdlYkdMQnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKSA/IG1fYXJyYXlCdWZmZXJCeXRlTGVu
Z3RoIDogbV9lbGVtZW50QXJyYXlCdWZmZXJCeXRlTGVuZ3RoOworICAgIHJldHVybiBtX2J5dGVM
ZW5ndGg7CiB9CiAKIGxvbmcgV2ViR0xCdWZmZXI6OmdldENhY2hlZE1heEluZGV4KHVuc2lnbmVk
IGxvbmcgdHlwZSkKQEAgLTE0Myw2ICsxNDQsMTUgQEAgdm9pZCBXZWJHTEJ1ZmZlcjo6c2V0Q2Fj
aGVkTWF4SW5kZXgodW5zaQogICAgIG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnkgPSAobV9uZXh0
QXZhaWxhYmxlQ2FjaGVFbnRyeSArIDEpICUgbnVtRW50cmllczsKIH0KIAordm9pZCBXZWJHTEJ1
ZmZlcjo6c2V0VGFyZ2V0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIC8vIEluIFdlYkdM
LCBhIGJ1ZmZlciBpcyBib3VuZCB0byBpdHMgdGFyZ2V0IGluIGl0cyBsaWZldGltZQorICAgIGlm
IChtX3RhcmdldCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKK30KKwogdm9p
ZCBXZWJHTEJ1ZmZlcjo6Y2xlYXJDYWNoZWRNYXhJbmRpY2VzKCkKIHsKICAgICBtZW1zZXQobV9t
YXhJbmRleENhY2hlLCAwLCBzaXplb2YobV9tYXhJbmRleENhY2hlKSk7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiA2MTcwOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICAgICAgYm9vbCBh
c3NvY2lhdGVCdWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSk7Ci0gICAg
ICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlC
dWZmZXJWaWV3KiBhcnJheSk7Ci0gICAgICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkp
OworICAgICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoaW50IHNpemUpOworICAgICAgICBi
b29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSk7CisgICAgICAg
IGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YShsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3
KiBhcnJheSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0KSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0
OwogICAgICAgICBjb25zdCBBcnJheUJ1ZmZlciogZWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7IH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAvLyBHZXRzIHRoZSBjYWNoZWQgbWF4IGluZGV4IGZvciB0aGUgZ2l2
ZW4gdHlwZS4gUmV0dXJucyAtMSBpZgpAQCAtNTMsNiArNTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFNldHMgdGhlIGNhY2hlZCBtYXggaW5kZXggZm9yIHRoZSBnaXZlbiB0
eXBlLgogICAgICAgICB2b2lkIHNldENhY2hlZE1heEluZGV4KHVuc2lnbmVkIGxvbmcgdHlwZSwg
bG9uZyB2YWx1ZSk7CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRUYXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldDsgfQorICAgICAgICB2b2lkIHNldFRhcmdldCh1bnNpZ25lZCBsb25n
KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CiAKQEAgLTYxLDkgKzY0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX3RhcmdldDsKKwogICAgICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG1fZWxlbWVudEFycmF5QnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBt
X2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXJyYXlC
dWZmZXJCeXRlTGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiAKICAgICAg
ICAgLy8gT3B0aW1pemF0aW9uIGZvciBpbmRleCB2YWxpZGF0aW9uLiBGb3IgZWFjaCB0eXBlIG9m
IGluZGV4CiAgICAgICAgIC8vIChpLmUuLCBVTlNJR05FRF9TSE9SVCksIGNhY2hlIHRoZSBtYXhp
bXVtIGluZGV4IGluIHRoZQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgs
MTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodQogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGJ1ZmZlciAmJiBidWZm
ZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmICh0YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKICAgICAgICAgbV9ib3VuZEFycmF5
QnVmZmVyID0gYnVmZmVyOwpAQCAtMjM5LDYgKzI0Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kQnVmZmVyKHUKICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
dGFyZ2V0LCBidWZmZXIpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGJ1ZmZlci0+c2V0VGFy
Z2V0KHRhcmdldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMzM0LDEyICszNDAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEodQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgbV9ib3VuZEVsZW1lbnRBcnJheUJ1
ZmZlcikgewotICAgICAgICBpZiAoIW1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmFzc29jaWF0
ZUJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplKSkgeworICAgICAgICBpZiAoIW1fYm91bmRFbGVtZW50
QXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc2l6ZSkpIHsKICAgICAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiBtX2JvdW5kQXJyYXlCdWZm
ZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplKSkgeworICAgICAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyRGF0YShzaXplKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM1NiwxMiArMzYyLDEyIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHUKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSICYm
IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHRhcmdldCwgZGF0YSkpIHsKKyAgICAg
ICAgaWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRh
dGEpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIgJiYgbV9ib3VuZEFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGlmICghbV9ib3VuZEFycmF5QnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHRhcmdldCwgZGF0YSkpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKICAgICAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zNzgsMTIgKzM4
NCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0CiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUiAmJiBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKSB7Ci0gICAg
ICAgIGlmICghbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YSh0YXJnZXQsIG9mZnNldCwgZGF0YSkpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kRWxlbWVudEFy
cmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsKICAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiBtX2JvdW5k
QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEpKSB7CisgICAgICAgIGlmICghbV9i
b3VuZEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsK
ICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02
NzUsMTEgKzY4MSwxMSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVFbGVt
CiAgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KICAgICAgICAgdW9m
ZnNldCAvPSAyOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSKSAvIDI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7CiAgICAgICAgIGlmICh1b2Zmc2V0ID4gbiB8fCBjb3Vu
dCA+IG4gLSB1b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICB1
bnNpZ25lZCBsb25nIG4gPSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKEdy
YXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUik7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICAg
ICAgaWYgKHVvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIHVvZmZzZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNjk5LDE0ICs3MDUsMTQgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZQogICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVt
IGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4K
ICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aChHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVIpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBt
X2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1f
Ym91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCiAg
ICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+
KHBbaV0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBu
dW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhp
Y3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSAvIHNpemVvZih1bnNpZ25lZCBzaG9y
dCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkt
PmRhdGEoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVu
dHM7IGkrKykKICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRleCwgc3RhdGlj
X2Nhc3Q8bG9uZz4ocFtpXSkpOwpAQCAtMzA5Miw3ICszMDk4LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYgogICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3Jz
IGluIG51bUVsZW1lbnRzIGNvbXB1dGF0aW9uLgogICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50
LCB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQogICAgIC8vIGVsZW1lbnQgYW5k
IG5vdGhpbmcgYmV5b25kIGl0LgotICAgIGxvbmcgYnl0ZXNSZW1haW5pbmcgPSBtX2JvdW5kQXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgLSBv
ZmZzZXQ7CisgICAgbG9uZyBieXRlc1JlbWFpbmluZyA9IG1fYm91bmRBcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIC0gb2Zmc2V0OwogICAgIGlmIChieXRlc1JlbWFpbmluZyA8IGJ5dGVzUGVyRWxl
bWVudCkKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5udW1FbGVtZW50cyA9IDA7
CiAgICAgZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE3MTApCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0yMyAgWmhlbnlh
byBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEEgYnVmZmVyIHNob3VsZCBiZSBib3VuZCB0byBvbmUgdGFyZ2V0IGlu
IGl0cyBsaWZldGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDExMDgKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2J1ZmZlci1iaW5kLXRl
c3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9idWZm
ZXItYmluZC10ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA2LTIzICBTdGVwaGVuIFdoaXRlICA8
c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5
YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVz
dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvYnVmZmVyLWJpbmQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9idWZmZXItYmluZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorQ2hlY2tzIGEgYnVmZmVyIGNhbiBvbmx5IGJlIGJv
dW5kIHRvIDEgdGFyZ2V0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFz
LmdldENvbnRleHQKK1BBU1MgY29udGV4dCBleGlzdHMKKworUEFTUyBzaG91bGQgYmUgYWJsZSB0
byBiaW5kIGJ1ZmZlci4KK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8gdW5iaW5kIGJ1ZmZlci4KK1BB
U1Mgc2hvdWxkIGdldCBJTlZBTElEX09QRVJBVElPTiBpZiBhdHRlbXB0aW5nIHRvIGJpbmQgYnVm
ZmVyIHRvIGRpZmZlcmVudCB0YXJnZXQKK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8gYmluZCBidWZm
ZXIuCitQQVNTIHNob3VsZCBiZSBhYmxlIHRvIHVuYmluZCBidWZmZXIuCitQQVNTIHNob3VsZCBn
ZXQgSU5WQUxJRF9PUEVSQVRJT04gaWYgYXR0ZW1wdGluZyB0byBiaW5kIGJ1ZmZlciB0byBkaWZm
ZXJlbnQgdGFyZ2V0CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9idWZmZXItYmlu
ZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YnVmZmVyLWJpbmQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFu
c2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4K
KzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+V2ViR0wgQmluZEJ1ZmZlciBjb25mb3JtYW5j
ZSB0ZXN0LjwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBzdHlsZT0id2lkdGg6IDQw
cHg7IGhlaWdodDogNDBweDsiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNr
cyBhIGJ1ZmZlciBjYW4gb25seSBiZSBib3VuZCB0byAxIHRhcmdldC4iKTsKKworZGVidWcoIiIp
OworZGVidWcoIkNhbnZhcy5nZXRDb250ZXh0Iik7CisKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4
dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIikpOworaWYgKCFnbCkgeworICB0ZXN0
RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICB0ZXN0UGFzc2Vk
KCJjb250ZXh0IGV4aXN0cyIpOworCisgIGRlYnVnKCIiKTsKKworICB2YXIgYnVmID0gZ2wuY3Jl
YXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICBh
c3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICJzaG91
bGQgYmUgYWJsZSB0byBiaW5kIGJ1ZmZlci4iKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwK
KyAgICAgICAgICAgICJzaG91bGQgYmUgYWJsZSB0byB1bmJpbmQgYnVmZmVyLiIpOworICBnbC5i
aW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWYpOworICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAgICJzaG91bGQg
Z2V0IElOVkFMSURfT1BFUkFUSU9OIGlmIGF0dGVtcHRpbmcgdG8gYmluZCBidWZmZXIgdG8gZGlm
ZmVyZW50IHRhcmdldCIpOworCisgIHZhciBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgZ2wu
YmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmKTsKKyAgYXNzZXJ0TXNnKGds
LmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCisgICAgICAgICAgICAic2hvdWxkIGJlIGFibGUg
dG8gYmluZCBidWZmZXIuIik7CisgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZG
RVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAg
ICAgICAgICAgICJzaG91bGQgYmUgYWJsZSB0byB1bmJpbmQgYnVmZmVyLiIpOworICBnbC5iaW5k
QnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkg
PT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAic2hvdWxkIGdldCBJTlZBTElE
X09QRVJBVElPTiBpZiBhdHRlbXB0aW5nIHRvIGJpbmQgYnVmZmVyIHRvIGRpZmZlcmVudCB0YXJn
ZXQiKTsKK30KKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRt
bD4KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59664</attachid>
            <date>2010-06-24 09:40:08 -0700</date>
            <delta_ts>2010-06-25 19:47:55 -0700</delta_ts>
            <desc>revised patch: fixed the typo</desc>
            <filename>buffer.patch</filename>
            <type>text/plain</type>
            <size>17618</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTcxMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMjMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJ1ZmZl
ciBzaG91bGQgYmUgYm91bmQgdG8gb25lIHRhcmdldCBpbiBpdHMgbGlmZXRpbWUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMTA4CisKKyAgICAgICAg
VGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCisKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1
ZmZlcjo6V2ViR0xCdWZmZXIpOiBJbml0IHRhcmdldCB0byAwLiAKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKTogUmVtb3ZlIHRhcmdldCBwYXJhbWV0
ZXIsIHVzZSBvbmUgYnl0ZUxlbmd0aCBtZW1iZXIuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1
ZmZlcjo6YXNzb2NpYXRlQnVmZmVyU3ViRGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xCdWZmZXI6OmJ5dGVMZW5ndGgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
QnVmZmVyOjpzZXRUYXJnZXQpOiBTZXQgdGFyZ2V0LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMQnVmZmVyLmg6IENhY2hlIHRhcmdldCBpbiB0aGUgV2ViR0xCdWZmZXIgb2JqZWN0LCB1c2Ug
b25lIGJ5dGVMZW5ndGggbWVtYmVyLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6Omdl
dFRhcmdldCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcik6
IENoZWNrIGlmIGEgYnVmZmVyIGlzIGJvdW5kIHRvIGFub3RoZXIgdGFyZ2V0OyBzZXQgYnVmZmVy
IG9iamVjdCBpbnRlcm5hbCB0YXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJ1ZmZlckRhdGEpOiBSZW1vdmUgdGFyZ2V0IHBhcmFtZXRlciBhbmQgdXNlIHRo
ZSBXZWJHTEJ1ZmZlciBjYWNoZWQgdGFyZ2V0IGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheUNvbnNlcnZhdGl2ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKTogRGl0dG8uCisKIDIwMTAtMDYt
MjMgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCBQYXNzUmVmUHRyPFdlYkdMQnVm
ZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlCiAKIFdlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICA6IENhbnZhc09iamVjdChjdHgpCi0gICAgLCBtX2Vs
ZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGgoMCkKLSAgICAsIG1fYXJyYXlCdWZmZXJCeXRlTGVu
Z3RoKDApCisgICAgLCBtX3RhcmdldCgwKQorICAgICwgbV9ieXRlTGVuZ3RoKDApCiAgICAgLCBt
X25leHRBdmFpbGFibGVDYWNoZUVudHJ5KDApCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCkpOwpAQCAtNTIsNTAgKzUyLDUxIEBA
IHZvaWQgV2ViR0xCdWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0KICAgICBjb250ZXh0KCkt
PmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihvYmplY3QpOwogfQogCi1ib29sIFdl
YkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQg
c2l6ZSkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoaW50IHNpemUpCiB7
Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVIpIHsKLSAgICAgICAgbV9lbGVtZW50QXJyYXlCdWZmZXJCeXRlTGVuZ3RoID0gc2l6ZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgewotICAgICAgICBtX2FycmF5QnVmZmVyQnl0ZUxl
bmd0aCA9IHNpemU7CisgICAgc3dpdGNoIChtX3RhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUjoKKyAgICAgICAgbV9ieXRlTGVuZ3RoID0gc2l6ZTsKICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LQotICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBXZWJHTEJ1ZmZlcjo6YXNzb2NpYXRlQnVm
ZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKK2Jv
b2wgV2ViR0xCdWZmZXI6OmFzc29jaWF0ZUJ1ZmZlckRhdGEoQXJyYXlCdWZmZXJWaWV3KiBhcnJh
eSkKIHsKKyAgICBpZiAoIW1fdGFyZ2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYg
KCFhcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgeworCisgICAgaWYg
KG1fdGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgewog
ICAgICAgICBjbGVhckNhY2hlZE1heEluZGljZXMoKTsKLSAgICAgICAgbV9lbGVtZW50QXJyYXlC
dWZmZXJCeXRlTGVuZ3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgbV9ieXRlTGVu
Z3RoID0gYXJyYXktPmJ5dGVMZW5ndGgoKTsKICAgICAgICAgLy8gV2UgbXVzdCBhbHdheXMgY2xv
bmUgdGhlIGluY29taW5nIGRhdGEgYmVjYXVzZSBjbGllbnQtc2lkZQogICAgICAgICAvLyBtb2Rp
ZmljYXRpb25zIHdpdGhvdXQgY2FsbGluZyBidWZmZXJEYXRhIG9yIGJ1ZmZlclN1YkRhdGEKICAg
ICAgICAgLy8gbXVzdCBuZXZlciBiZSBhYmxlIHRvIGNoYW5nZSB0aGUgdmFsaWRhdGlvbiByZXN1
bHRzLgogICAgICAgICBtX2VsZW1lbnRBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
YXJyYXktPmJ1ZmZlcigpLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgewot
ICAgICAgICBtX2FycmF5QnVmZmVyQnl0ZUxlbmd0aCA9IGFycmF5LT5ieXRlTGVuZ3RoKCk7CisK
KyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgewor
ICAgICAgICBtX2J5dGVMZW5ndGggPSBhcnJheS0+Ynl0ZUxlbmd0aCgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFdlYkdM
QnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25n
IG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBhcnJheSkKK2Jvb2wgV2ViR0xCdWZmZXI6OmFzc29j
aWF0ZUJ1ZmZlclN1YkRhdGEobG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkpCiB7
CisgICAgaWYgKCFtX3RhcmdldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghYXJy
YXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgaWYgKHRhcmdldCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKworICAgIGlmIChtX3Rh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKICAgICAg
ICAgY2xlYXJDYWNoZWRNYXhJbmRpY2VzKCk7CiAKICAgICAgICAgLy8gV2UgbmVlZCB0byBwcm90
ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdyB3aXRoIHRoZXNlIHRlc3RzCkBAIC0xMDMsMjIg
KzEwNCwyMiBAQCBib29sIFdlYkdMQnVmZmVyOjphc3NvY2lhdGVCdWZmZXJTdWJEYXRhCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgdW5zaWduZWQgbG9u
ZyB1b2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4ob2Zmc2V0KTsKLSAgICAgICAg
aWYgKHVvZmZzZXQgPiBtX2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGggfHwgYXJyYXktPmJ5
dGVMZW5ndGgoKSA+IG1fZWxlbWVudEFycmF5QnVmZmVyQnl0ZUxlbmd0aCAtIHVvZmZzZXQpCisg
ICAgICAgIGlmICh1b2Zmc2V0ID4gbV9ieXRlTGVuZ3RoIHx8IGFycmF5LT5ieXRlTGVuZ3RoKCkg
PiBtX2J5dGVMZW5ndGggLSB1b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgCiAgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9l
bGVtZW50QXJyYXlCdWZmZXItPmRhdGEoKSkgKyBvZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygp
LCBhcnJheS0+Ynl0ZUxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAotICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAg
ICAgICAgcmV0dXJuIGFycmF5LT5ieXRlTGVuZ3RoKCkgKyBvZmZzZXQgPD0gbV9hcnJheUJ1ZmZl
ckJ5dGVMZW5ndGg7CisKKyAgICBpZiAobV90YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUikKKyAgICAgICAgcmV0dXJuIGFycmF5LT5ieXRlTGVuZ3RoKCkgKyBvZmZzZXQg
PD0gbV9ieXRlTGVuZ3RoOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi11bnNpZ25lZCBXZWJH
TEJ1ZmZlcjo6Ynl0ZUxlbmd0aCh1bnNpZ25lZCBsb25nIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVk
IFdlYkdMQnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHRhcmdldCA9
PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKSA/IG1fYXJyYXlCdWZmZXJCeXRlTGVu
Z3RoIDogbV9lbGVtZW50QXJyYXlCdWZmZXJCeXRlTGVuZ3RoOworICAgIHJldHVybiBtX2J5dGVM
ZW5ndGg7CiB9CiAKIGxvbmcgV2ViR0xCdWZmZXI6OmdldENhY2hlZE1heEluZGV4KHVuc2lnbmVk
IGxvbmcgdHlwZSkKQEAgLTE0Myw2ICsxNDQsMTUgQEAgdm9pZCBXZWJHTEJ1ZmZlcjo6c2V0Q2Fj
aGVkTWF4SW5kZXgodW5zaQogICAgIG1fbmV4dEF2YWlsYWJsZUNhY2hlRW50cnkgPSAobV9uZXh0
QXZhaWxhYmxlQ2FjaGVFbnRyeSArIDEpICUgbnVtRW50cmllczsKIH0KIAordm9pZCBXZWJHTEJ1
ZmZlcjo6c2V0VGFyZ2V0KHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQoreworICAgIC8vIEluIFdlYkdM
LCBhIGJ1ZmZlciBpcyBib3VuZCB0byBvbmUgdGFyZ2V0IGluIGl0cyBsaWZldGltZQorICAgIGlm
IChtX3RhcmdldCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiB8fCB0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX3RhcmdldCA9IHRhcmdldDsKK30KKwogdm9p
ZCBXZWJHTEJ1ZmZlcjo6Y2xlYXJDYWNoZWRNYXhJbmRpY2VzKCkKIHsKICAgICBtZW1zZXQobV9t
YXhJbmRleENhY2hlLCAwLCBzaXplb2YobV9tYXhJbmRleENhY2hlKSk7CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiA2MTcwOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDExIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
QnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAKLSAgICAgICAgYm9vbCBh
c3NvY2lhdGVCdWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSk7Ci0gICAg
ICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQXJyYXlC
dWZmZXJWaWV3KiBhcnJheSk7Ci0gICAgICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogYXJyYXkp
OworICAgICAgICBib29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoaW50IHNpemUpOworICAgICAgICBi
b29sIGFzc29jaWF0ZUJ1ZmZlckRhdGEoQXJyYXlCdWZmZXJWaWV3KiBhcnJheSk7CisgICAgICAg
IGJvb2wgYXNzb2NpYXRlQnVmZmVyU3ViRGF0YShsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3
KiBhcnJheSk7CiAgICAgICAgIAotICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0KSBjb25zdDsKKyAgICAgICAgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0
OwogICAgICAgICBjb25zdCBBcnJheUJ1ZmZlciogZWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCk7IH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAvLyBHZXRzIHRoZSBjYWNoZWQgbWF4IGluZGV4IGZvciB0aGUgZ2l2
ZW4gdHlwZS4gUmV0dXJucyAtMSBpZgpAQCAtNTMsNiArNTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIC8vIFNldHMgdGhlIGNhY2hlZCBtYXggaW5kZXggZm9yIHRoZSBnaXZlbiB0
eXBlLgogICAgICAgICB2b2lkIHNldENhY2hlZE1heEluZGV4KHVuc2lnbmVkIGxvbmcgdHlwZSwg
bG9uZyB2YWx1ZSk7CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRUYXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldDsgfQorICAgICAgICB2b2lkIHNldFRhcmdldCh1bnNpZ25lZCBsb25n
KTsKKwogICAgIHByb3RlY3RlZDoKICAgICAgICAgV2ViR0xCdWZmZXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CiAKQEAgLTYxLDkgKzY0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBw
cml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCdWZmZXIoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX3RhcmdldDsKKwogICAgICAgICBSZWZQ
dHI8QXJyYXlCdWZmZXI+IG1fZWxlbWVudEFycmF5QnVmZmVyOwotICAgICAgICB1bnNpZ25lZCBt
X2VsZW1lbnRBcnJheUJ1ZmZlckJ5dGVMZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fYXJyYXlC
dWZmZXJCeXRlTGVuZ3RoOworICAgICAgICB1bnNpZ25lZCBtX2J5dGVMZW5ndGg7CiAKICAgICAg
ICAgLy8gT3B0aW1pemF0aW9uIGZvciBpbmRleCB2YWxpZGF0aW9uLiBGb3IgZWFjaCB0eXBlIG9m
IGluZGV4CiAgICAgICAgIC8vIChpLmUuLCBVTlNJR05FRF9TSE9SVCksIGNhY2hlIHRoZSBtYXhp
bXVtIGluZGV4IGluIHRoZQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjE3MDkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsyMjgs
MTAgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodQogICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGJ1ZmZlciAmJiBidWZm
ZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmICh0YXJnZXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKICAgICAgICAgbV9ib3VuZEFycmF5
QnVmZmVyID0gYnVmZmVyOwpAQCAtMjM5LDYgKzI0Myw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kQnVmZmVyKHUKICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
dGFyZ2V0LCBidWZmZXIpOworICAgIGlmIChidWZmZXIpCisgICAgICAgIGJ1ZmZlci0+c2V0VGFy
Z2V0KHRhcmdldCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApA
QCAtMzM0LDEyICszNDAsMTIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEodQogewogICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIgJiYgbV9ib3VuZEVsZW1lbnRBcnJheUJ1
ZmZlcikgewotICAgICAgICBpZiAoIW1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmFzc29jaWF0
ZUJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplKSkgeworICAgICAgICBpZiAoIW1fYm91bmRFbGVtZW50
QXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc2l6ZSkpIHsKICAgICAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0YXJn
ZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiBtX2JvdW5kQXJyYXlCdWZm
ZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplKSkgeworICAgICAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyRGF0YShzaXplKSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KQEAgLTM1NiwxMiArMzYyLDEyIEBAIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHUKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSICYm
IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kRWxlbWVu
dEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHRhcmdldCwgZGF0YSkpIHsKKyAgICAg
ICAgaWYgKCFtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRh
dGEpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIgJiYgbV9ib3VuZEFycmF5QnVmZmVyKSB7Ci0gICAgICAgIGlmICghbV9ib3VuZEFycmF5QnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHRhcmdldCwgZGF0YSkpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKICAgICAgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zNzgsMTIgKzM4
NCwxMiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0CiB7CiAgICAg
VU5VU0VEX1BBUkFNKGVjKTsKICAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUiAmJiBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyKSB7Ci0gICAg
ICAgIGlmICghbV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YSh0YXJnZXQsIG9mZnNldCwgZGF0YSkpIHsKKyAgICAgICAgaWYgKCFtX2JvdW5kRWxlbWVudEFy
cmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsKICAgICAg
ICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNl
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiAmJiBtX2JvdW5k
QXJyYXlCdWZmZXIpIHsKLSAgICAgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGRhdGEpKSB7CisgICAgICAgIGlmICghbV9i
b3VuZEFycmF5QnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKG9mZnNldCwgZGF0YSkpIHsK
ICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02
NzUsMTEgKzY4MSwxMSBAQCBib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVFbGVt
CiAgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KICAgICAgICAgdW9m
ZnNldCAvPSAyOwogCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSKSAvIDI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7CiAgICAgICAgIGlmICh1b2Zmc2V0ID4gbiB8fCBjb3Vu
dCA+IG4gLSB1b2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICB1
bnNpZ25lZCBsb25nIG4gPSBtX2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKEdy
YXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUik7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgbiA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKICAgICAg
ICAgaWYgKHVvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIHVvZmZzZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNjk5LDE0ICs3MDUsMTQgQEAgYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZQogICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVt
IGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4K
ICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEU6IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9i
b3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aChHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVIpOworICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBt
X2JvdW5kRWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CiAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1f
Ym91bmRFbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpOwog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCiAg
ICAgICAgICAgICAgICAgbWF4SW5kZXggPSBtYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGxvbmc+
KHBbaV0pKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBu
dW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhp
Y3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKSAvIHNpemVvZih1bnNpZ25lZCBzaG9y
dCk7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fYm91bmRFbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4obV9ib3VuZEVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkt
PmRhdGEoKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRWxlbWVu
dHM7IGkrKykKICAgICAgICAgICAgICAgICBtYXhJbmRleCA9IG1heChtYXhJbmRleCwgc3RhdGlj
X2Nhc3Q8bG9uZz4ocFtpXSkpOwpAQCAtMzA5Miw3ICszMDk4LDcgQEAgdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYgogICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3Jz
IGluIG51bUVsZW1lbnRzIGNvbXB1dGF0aW9uLgogICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50
LCB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQogICAgIC8vIGVsZW1lbnQgYW5k
IG5vdGhpbmcgYmV5b25kIGl0LgotICAgIGxvbmcgYnl0ZXNSZW1haW5pbmcgPSBtX2JvdW5kQXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikgLSBv
ZmZzZXQ7CisgICAgbG9uZyBieXRlc1JlbWFpbmluZyA9IG1fYm91bmRBcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIC0gb2Zmc2V0OwogICAgIGlmIChieXRlc1JlbWFpbmluZyA8IGJ5dGVzUGVyRWxl
bWVudCkKICAgICAgICAgbV92ZXJ0ZXhBdHRyaWJTdGF0ZVtpbmR4XS5udW1FbGVtZW50cyA9IDA7
CiAgICAgZWxzZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE3MTApCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNi0yMyAgWmhlbnlh
byBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEEgYnVmZmVyIHNob3VsZCBiZSBib3VuZCB0byBvbmUgdGFyZ2V0IGlu
IGl0cyBsaWZldGltZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDExMDgKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2J1ZmZlci1iaW5kLXRl
c3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9idWZm
ZXItYmluZC10ZXN0Lmh0bWw6IEFkZGVkLgorCiAyMDEwLTA2LTIzICBTdGVwaGVuIFdoaXRlICA8
c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5
YXR0LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVz
dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvYnVmZmVyLWJpbmQtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9idWZmZXItYmluZC10ZXN0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorQ2hlY2tzIGEgYnVmZmVyIGNhbiBvbmx5IGJlIGJv
dW5kIHRvIDEgdGFyZ2V0LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFz
LmdldENvbnRleHQKK1BBU1MgY29udGV4dCBleGlzdHMKKworUEFTUyBzaG91bGQgYmUgYWJsZSB0
byBiaW5kIGJ1ZmZlci4KK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8gdW5iaW5kIGJ1ZmZlci4KK1BB
U1Mgc2hvdWxkIGdldCBJTlZBTElEX09QRVJBVElPTiBpZiBhdHRlbXB0aW5nIHRvIGJpbmQgYnVm
ZmVyIHRvIGRpZmZlcmVudCB0YXJnZXQKK1BBU1Mgc2hvdWxkIGJlIGFibGUgdG8gYmluZCBidWZm
ZXIuCitQQVNTIHNob3VsZCBiZSBhYmxlIHRvIHVuYmluZCBidWZmZXIuCitQQVNTIHNob3VsZCBn
ZXQgSU5WQUxJRF9PUEVSQVRJT04gaWYgYXR0ZW1wdGluZyB0byBiaW5kIGJ1ZmZlciB0byBkaWZm
ZXJlbnQgdGFyZ2V0CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9idWZmZXItYmlu
ZC10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YnVmZmVyLWJpbmQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYnVmZmVyLWJpbmQtdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFu
c2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4K
KzxodG1sPgorICA8aGVhZD4KKyAgICA8dGl0bGU+V2ViR0wgQmluZEJ1ZmZlciBjb25mb3JtYW5j
ZSB0ZXN0LjwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNh
bnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBzdHlsZT0id2lkdGg6IDQw
cHg7IGhlaWdodDogNDBweDsiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIkNoZWNr
cyBhIGJ1ZmZlciBjYW4gb25seSBiZSBib3VuZCB0byAxIHRhcmdldC4iKTsKKworZGVidWcoIiIp
OworZGVidWcoIkNhbnZhcy5nZXRDb250ZXh0Iik7CisKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4
dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIikpOworaWYgKCFnbCkgeworICB0ZXN0
RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICB0ZXN0UGFzc2Vk
KCJjb250ZXh0IGV4aXN0cyIpOworCisgIGRlYnVnKCIiKTsKKworICB2YXIgYnVmID0gZ2wuY3Jl
YXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICBh
c3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAgICAgICAgICAgICJzaG91
bGQgYmUgYWJsZSB0byBiaW5kIGJ1ZmZlci4iKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwK
KyAgICAgICAgICAgICJzaG91bGQgYmUgYWJsZSB0byB1bmJpbmQgYnVmZmVyLiIpOworICBnbC5i
aW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWYpOworICBhc3NlcnRNc2coZ2wu
Z2V0RXJyb3IoKSA9PSBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAgICJzaG91bGQg
Z2V0IElOVkFMSURfT1BFUkFUSU9OIGlmIGF0dGVtcHRpbmcgdG8gYmluZCBidWZmZXIgdG8gZGlm
ZmVyZW50IHRhcmdldCIpOworCisgIHZhciBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgZ2wu
YmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmKTsKKyAgYXNzZXJ0TXNnKGds
LmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IsCisgICAgICAgICAgICAic2hvdWxkIGJlIGFibGUg
dG8gYmluZCBidWZmZXIuIik7CisgIGdsLmJpbmRCdWZmZXIoZ2wuRUxFTUVOVF9BUlJBWV9CVUZG
RVIsIG51bGwpOworICBhc3NlcnRNc2coZ2wuZ2V0RXJyb3IoKSA9PSBnbC5OT19FUlJPUiwKKyAg
ICAgICAgICAgICJzaG91bGQgYmUgYWJsZSB0byB1bmJpbmQgYnVmZmVyLiIpOworICBnbC5iaW5k
QnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKKyAgYXNzZXJ0TXNnKGdsLmdldEVycm9yKCkg
PT0gZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAic2hvdWxkIGdldCBJTlZBTElE
X09QRVJBVElPTiBpZiBhdHRlbXB0aW5nIHRvIGJpbmQgYnVmZmVyIHRvIGRpZmZlcmVudCB0YXJn
ZXQiKTsKK30KKworZGVidWcoIiIpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0PgorPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRt
bD4KKwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>