<?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>24999</bug_id>
          
          <creation_ts>2009-04-02 00:02:50 -0700</creation_ts>
          <short_desc>Optimize hit testing with transforms</short_desc>
          <delta_ts>2009-04-02 09:48:06 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116253</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-02 00:02:50 -0700</bug_when>
    <thetext>Hit testing with transforms goes through a more expensive code path in RenderLayer::hitTestLayer. This needs speeding up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116254</commentid>
    <comment_count>1</comment_count>
      <attachid>29184</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-02 00:03:18 -0700</bug_when>
    <thetext>Created attachment 29184
Testcase that calls elementFromPoint 200000 times</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116255</commentid>
    <comment_count>2</comment_count>
      <attachid>29185</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-02 00:12:46 -0700</bug_when>
    <thetext>Created attachment 29185
Patch, changelog

This patch, and the patch from bug 24648, take the runtime of this attached testcase from 1550ms to about 870ms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116272</commentid>
    <comment_count>3</comment_count>
      <attachid>29185</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-02 07:44:57 -0700</bug_when>
    <thetext>Comment on attachment 29185
Patch, changelog

Our usual naming scheme is to use the word &quot;get&quot; in a function that uses an out parameter rather than a return value. Thus transformFromContainer would be renamed getTransformFromContainer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116286</commentid>
    <comment_count>4</comment_count>
      <attachid>29191</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-02 09:11:10 -0700</bug_when>
    <thetext>Created attachment 29191
Revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116287</commentid>
    <comment_count>5</comment_count>
      <attachid>29191</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-04-02 09:16:48 -0700</bug_when>
    <thetext>Comment on attachment 29191
Revised patch

&gt; -    void move(int x, int y);
&gt; +    void move(int x, int y);    // always flattens

The formatting here is slightly unconventional. We typically use a single space in cases like this rather than using, say, 4 spaces.

&gt; +    void translate(int x, int y, bool accumulateTransform);

I am uncomfortable with boolean arguments in C++ functions. They&apos;re hard to read at the call site. The &quot;true&quot; doesn&apos;t help me understand what the function is doing. Further, the only caller of this function is passing true. Do we really need the boolean argument? If the version that flattens is needed, you could consider the &quot;named enum&quot; design pattern or having two separately named functions.

&gt; +    void flattenWithTransform(const TransformationMatrix&amp; t);

No need to include a name for the argument &quot;t&quot; here.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116295</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-04-02 09:48:06 -0700</bug_when>
    <thetext>I used enums instead of bools, and addressed the other comments.
http://trac.webkit.org/changeset/42174</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>29184</attachid>
            <date>2009-04-02 00:03:18 -0700</date>
            <delta_ts>2009-04-02 00:03:18 -0700</delta_ts>
            <desc>Testcase that calls elementFromPoint 200000 times</desc>
            <filename>3d-point-mapping-simple.html</filename>
            <type>text/html</type>
            <size>2443</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">PGh0bWw+CjxoZWFkPgogIDx0aXRsZT5Qb2ludCBtYXBwaW5nIHBlcmZvcm1hbmNlIC0gc2ltcGxl
PC90aXRsZT4KICA8c2NyaXB0IHNyYz0icG9pbnQtbWFwcGluZy1oZWxwZXJzLmpzIiB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij48L3NjcmlwdD4KICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgoKICAgIGZ1bmN0aW9uIHRlc3QoKQog
ICAgewogICAgICAvLyBJbiBub24tdGVzdCBtb2RlLCBzaG93IHRoZSBtb3VzZSBjb29yZHMgZm9y
IHRlc3RpbmcKICAgICAgaWYgKCF3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAg
ZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmVkLCBm
YWxzZSk7CgogICAgICB2YXIgc3RhcnRUaW1lID0gbmV3IERhdGUoKTsKCiAgICAgIGNvbnN0IGtO
dW1JdGVyYXRpb25zID0gMjAwMDAwOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtOdW1JdGVy
YXRpb25zOyArK2kpCiAgICAgIHsKICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmVsZW1l
bnRGcm9tUG9pbnQoMjAwLCAyMDApOwogICAgICB9CiAgICAgIAogICAgICB2YXIgZW5kVGltZSA9
IG5ldyBEYXRlKCk7CiAgICAgIHZhciBlbGFwc2VkVGltZSA9IGVuZFRpbWUuZ2V0VGltZSgpIC0g
c3RhcnRUaW1lLmdldFRpbWUoKTsKICAgICAgbG9nKCdUb29rICcgKyBlbGFwc2VkVGltZSArICdt
cycpOwogICAgfQogIDwvc2NyaXB0PgogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNj
cmVlbiI+CiAgCiAgICBib2R5IHsKICAgICAgbWFyZ2luOiAwOwogICAgICBib3JkZXI6IDFweCBz
b2xpZCBibGFjazsKICAgICAgY3Vyc29yOiBjcm9zc2hhaXI7CiAgICB9CgogICAgLnRlc3Qgewog
ICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIGhlaWdodDogNDAwcHg7CiAgICAgIHdp
ZHRoOiA0MDBweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7CiAgICAgIG1hcmdpbjog
MjBweDsKICAgIH0KCiAgICAuYm94IHsKICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgd2lkdGg6
IDMwMHB4OwogICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIGJhY2tn
cm91bmQtY29sb3I6ICNEREQ7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgfQoK
ICAgIC5ib3g6aG92ZXIgewogICAgICBvdXRsaW5lOiAzcHggc29saWQgb3JhbmdlOwogICAgfQog
ICAgCiAgICAuY29udGFpbmVyIHsKICAgICAgaGVpZ2h0OiAzNDBweDsKICAgICAgd2lkdGg6IDM0
MHB4OwogICAgICBtYXJnaW46IDIwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwog
ICAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIC13ZWJraXQtdHJhbnNm
b3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsKICAgIH0KICAgIAogICAgLnRyYW5zZm9ybWVkIHsK
ICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgd2lkdGg6IDMwMHB4OwogICAgICBwYWRkaW5nOiAy
MHB4OwogICAgICBtYXJnaW46IDIwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwog
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQUE3OTk0OwogICAgICAtd2Via2l0LXRyYW5zZm9ybTog
dHJhbnNsYXRlM2QoMCwgMTBweCwgMCk7CiAgICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVy
LWJveDsKICAgIH0KICAgIAogICAgLmlubmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogYmx1
ZTsKICAgICAgaGVpZ2h0OiA5MHB4OwogICAgICB3aWR0aDogOTBweDsKICAgICAgbWFyZ2luOiA0
MHB4OwogICAgfQogICAgCiAgICAjcmVzdWx0cyB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
ICAgICAgbGVmdDogMzBweDsKICAgICAgdG9wOiA2NTBweDsKICAgIH0KICAgIAogICAgI21vdXNl
cG9zIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBsZWZ0OiAzMHB4OwogICAgICB0
b3A6IDYwMHB4OwogICAgICBjb2xvcjogZ3JheTsKICAgICAgZm9udC1zaXplOiBzbWFsbGVyOwog
ICAgfQogIDwvc3R5bGU+CjwvaGVhZD4KPGJvZHkgb25jbGljaz0iY2xpY2tlZChldmVudCkiPgoK
PCEtLSA8ZGl2IGlkPSJmaWxsZXIiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsg
d2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJSI+PC9kaXY+IC0tPgoKPGRpdiBjbGFzcz0idGVzdCI+
CiAgPCEtLSBGbGF0dGVuIGluIHRoZSBtaWRkbGUgb2YgM2QgLS0+CiAgPGRpdiBjbGFzcz0iY29u
dGFpbmVyIGJveCIgaWQ9ImJveDEiPgogICAgPGRpdiBjbGFzcz0idHJhbnNmb3JtZWQgYm94IiBp
ZD0iYm94MiI+CiAgICA8L2Rpdj4KICA8L2Rpdj4KPC9kaXY+Cgo8ZGl2IGlkPSJyZXN1bHRzIj48
L2Rpdj4KPGRpdiBpZD0ibW91c2Vwb3MiPjwvZGl2PgoKPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29185</attachid>
            <date>2009-04-02 00:12:46 -0700</date>
            <delta_ts>2009-04-02 09:11:10 -0700</delta_ts>
            <desc>Patch, changelog</desc>
            <filename>24999_patch.txt</filename>
            <type>text/plain</type>
            <size>10357</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjFmMTg0Yy4uZTIzZTAwNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAwOS0wNC0wMiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQ5OTkKKyAgICAgICAgCisgICAgICAgIE9wdGltaXplIGhpdCB0ZXN0aW5nIHdpdGggdHJh
bnNmb3Jtcy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQpOgorICAgICAgICB0cmFuc2Zv
cm1Gcm9tQ29udGFpbmVyKCkgY2hhbmdlIHRvIHJldHVybiB0aGUgbWF0cml4IGJ5IHJlZmVyZW5j
ZS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGUzRFRyYW5zZm9ybWVkRGVzY2VuZGFudFN0
YXR1cyk6CisgICAgICAgIFRoZSBtZXRob2QgZmFpbGVkIHRvIHNldCBtXzNEVHJhbnNmb3JtZWRE
ZXNjZW5kYW50U3RhdHVzRGlydHkgdG8gZmFsc2UsCisgICAgICAgIHNvIGRpZCB0aGUgd29yayBl
dmVyeSB0aW1lLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjcmVh
dGVMb2NhbFRyYW5zZm9ybVN0YXRlKToKKyAgICAgICAgT25seSBjYWxsIHRoZSBleHBlbnNpdmUg
dHJhbnNmb3JtRnJvbUNvbnRhaW5lcigpIGlmIHRoZXJlIGlzIGEgdHJhbnNmb3JtLAorICAgICAg
ICBvdGhlcndpc2Ugd2UganVzdCBoYXZlIGEgdHJhbnNsYXRpb24uCisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6
dHJhbnNmb3JtRnJvbUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oOgorICAgICAgICBDaGFuZ2UgdHJhbnNmb3JtRnJvbUNvbnRhaW5lcigpIHRvIHJldHVybiB0
aGUgbWF0cml4IGJ5IHJlZmVyZW5jZSB0bworICAgICAgICByZWR1Y2UgY29weWluZy4KKyAgICAg
ICAgCisgICAgICAgICogcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6dHJhbnNsYXRlKToKKyAgICAgICAgTmV3
IG1ldGhvZCB0aGF0IGFkZHMgYSB0cmFuc2xhdGlvbiB0byB0aGUgYWNjdW11bGF0ZWQgbWF0cml4
LCBvcHRpb25hbGx5CisgICAgICAgIHdpdGhvdXQgZmxhdHRlbmluZy4gQ2hlYXBlciB0aGFuIGFw
cGx5VHJhbnNmb3JtKCkuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdGluZ1Ry
YW5zZm9ybVN0YXRlOjphcHBseVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0
aW5nVHJhbnNmb3JtU3RhdGU6OmZsYXR0ZW4pOgorICAgICAgICBVc2UgZmxhdHRlbldpdGhUcmFu
c2Zvcm0oKS4KKyAgICAgICAgCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGU6OmZsYXR0ZW5XaXRoVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvVHJhbnNm
b3JtU3RhdGUuaDoKKyAgICAgICAgQWRkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKCksIHdoaWNoIGlz
IGEgaGVscGVyIHRoYXQgYWxsb3dzIHVzIHRvCisgICAgICAgIGF2b2lkIGRvaW5nIHRoZSBpbnZl
cnNlKCkgdHdpY2UuCisgICAgICAgCisKIDIwMDktMDQtMDEgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxz
ZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjQ5OTcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGRhZTU5ZTIuLjEx
Mjc2MTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcApAQCAtOTY5LDkgKzk2OSwxMSBAQCB2b2lk
IFJlbmRlckJveDo6bWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVw
YWludENvbnRhaW5lciwgYm9vbAogICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0
RnJvbUNvbnRhaW5lcihvKTsKIAogICAgIGJvb2wgcHJlc2VydmUzRCA9IHVzZVRyYW5zZm9ybXMg
JiYgKG8tPnN0eWxlKCktPnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKSk7
Ci0gICAgaWYgKHVzZVRyYW5zZm9ybXMgJiYgaGFzVHJhbnNmb3JtKQotICAgICAgICB0cmFuc2Zv
cm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKG8sIGNvbnRhaW5l
ck9mZnNldCksIHByZXNlcnZlM0QpOwotICAgIGVsc2UKKyAgICBpZiAodXNlVHJhbnNmb3JtcyAm
JiBoYXNUcmFuc2Zvcm0pIHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAg
ICAgdHJhbnNmb3JtRnJvbUNvbnRhaW5lcihvLCBjb250YWluZXJPZmZzZXQsIHQpOworICAgICAg
ICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRyYW5zZm9ybSh0LCBwcmVzZXJ2ZTNEKTsKKyAgICB9IGVs
c2UKICAgICAgICAgdHJhbnNmb3JtU3RhdGUubW92ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwg
Y29udGFpbmVyT2Zmc2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEKTsKIAogICAgIG8tPm1hcExvY2Fs
VG9Db250YWluZXIocmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5z
Zm9ybVN0YXRlKTsKQEAgLTk5OCw5ICsxMDAwLDExIEBAIHZvaWQgUmVuZGVyQm94OjptYXBBYnNv
bHV0ZVRvTG9jYWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9y
CiAgICAgSW50U2l6ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKG8pOwog
CiAgICAgYm9vbCBwcmVzZXJ2ZTNEID0gdXNlVHJhbnNmb3JtcyAmJiAoby0+c3R5bGUoKS0+cHJl
c2VydmVzM0QoKSB8fCBzdHlsZSgpLT5wcmVzZXJ2ZXMzRCgpKTsKLSAgICBpZiAodXNlVHJhbnNm
b3JtcyAmJiBoYXNUcmFuc2Zvcm0pCi0gICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNm
b3JtKHRyYW5zZm9ybUZyb21Db250YWluZXIobywgY29udGFpbmVyT2Zmc2V0KSwgcHJlc2VydmUz
RCk7Ci0gICAgZWxzZQorICAgIGlmICh1c2VUcmFuc2Zvcm1zICYmIGhhc1RyYW5zZm9ybSkgewor
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICB0cmFuc2Zvcm1Gcm9tQ29u
dGFpbmVyKG8sIGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFw
cGx5VHJhbnNmb3JtKHQsIHByZXNlcnZlM0QpOworICAgIH0gZWxzZQogICAgICAgICB0cmFuc2Zv
cm1TdGF0ZS5tb3ZlKC1jb250YWluZXJPZmZzZXQud2lkdGgoKSwgLWNvbnRhaW5lck9mZnNldC5o
ZWlnaHQoKSwgcHJlc2VydmUzRCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRl
eCA2ODBlMWZiLi45MWM1NjVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00ODYs
NiArNDg2LDggQEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRh
bnRTdGF0dXMoKQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbmVnWk9y
ZGVyTGlzdC0+c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgbV9oYXMzRFRyYW5zZm9ybWVk
RGVzY2VuZGFudCB8PSBtX25lZ1pPcmRlckxpc3QtPmF0KGkpLT51cGRhdGUzRFRyYW5zZm9ybWVk
RGVzY2VuZGFudFN0YXR1cygpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtXzNEVHJh
bnNmb3JtZWREZXNjZW5kYW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICB9CiAgICAgCiAgICAg
Ly8gSWYgd2UgbGl2ZSBpbiBhIDNkIGhpZXJhcmNoeSwgdGhlbiB0aGUgbGF5ZXIgYXQgdGhlIHJv
b3Qgb2YgdGhhdCBoaWVyYXJjaHkgbmVlZHMKQEAgLTIxODUsOCArMjE4NywxNCBAQCBQYXNzUmVm
UHRyPEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJh
bnNmb3JtU3RhdGUoUmVuZAogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIs
IG9mZnNldFgsIG9mZnNldFkpOwogICAgIH0KICAgICAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBjb250YWluZXJUcmFuc2Zvcm0gPSByZW5kZXJlcigpLT50cmFuc2Zvcm1Gcm9tQ29udGFpbmVy
KGNvbnRhaW5lckxheWVyID8gY29udGFpbmVyTGF5ZXItPnJlbmRlcmVyKCkgOiAwLCBJbnRTaXpl
KG9mZnNldFgsIG9mZnNldFkpKTsKLSAgICB0cmFuc2Zvcm1TdGF0ZS0+YXBwbHlUcmFuc2Zvcm0o
Y29udGFpbmVyVHJhbnNmb3JtLCB0cnVlKTsKKyAgICBpZiAodHJhbnNmb3JtKCkpIHsKKyAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGFpbmVyVHJhbnNmb3JtOworICAgICAgICByZW5k
ZXJlcigpLT50cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lckxheWVyID8gY29udGFpbmVy
TGF5ZXItPnJlbmRlcmVyKCkgOiAwLCBJbnRTaXplKG9mZnNldFgsIG9mZnNldFkpLCBjb250YWlu
ZXJUcmFuc2Zvcm0pOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS0+YXBwbHlUcmFuc2Zvcm0oY29u
dGFpbmVyVHJhbnNmb3JtLCB0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0cmFuc2Zvcm1T
dGF0ZS0+dHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFksIHRydWUpOworICAgIH0KKyAgICAKICAg
ICByZXR1cm4gdHJhbnNmb3JtU3RhdGU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDFhYmM1ZWYuLjk2NmE1MjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApA
QCAtMTY5NywxMyArMTY5NywxMyBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFwQWJzb2x1dGVUb0xv
Y2FsUG9pbnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFucwogICAgIH0KIH0K
IAotVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFp
bmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0LCBjb25zdCBJbnRTaXplJiBv
ZmZzZXRJbkNvbnRhaW5lcikgY29uc3QKK3ZvaWQgUmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9t
Q29udGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0LCBjb25zdCBJbnRT
aXplJiBvZmZzZXRJbkNvbnRhaW5lciwgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkg
Y29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250YWluZXJUcmFuc2Zvcm07Ci0g
ICAgY29udGFpbmVyVHJhbnNmb3JtLnRyYW5zbGF0ZShvZmZzZXRJbkNvbnRhaW5lci53aWR0aCgp
LCBvZmZzZXRJbkNvbnRhaW5lci5oZWlnaHQoKSk7CisgICAgdHJhbnNmb3JtLm1ha2VJZGVudGl0
eSgpOworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2Zmc2V0SW5Db250YWluZXIud2lkdGgoKSwg
b2Zmc2V0SW5Db250YWluZXIuaGVpZ2h0KCkpOwogICAgIFJlbmRlckxheWVyKiBsYXllcjsKICAg
ICBpZiAoaGFzTGF5ZXIoKSAmJiAobGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHRoaXMp
LT5sYXllcigpKSAmJiBsYXllci0+dHJhbnNmb3JtKCkpCi0gICAgICAgIGNvbnRhaW5lclRyYW5z
Zm9ybS5tdWx0TGVmdChsYXllci0+Y3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICAgICAgdHJhbnNm
b3JtLm11bHRMZWZ0KGxheWVyLT5jdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIAogI2lmIEVOQUJM
RSgzRF9SRU5ERVJJTkcpCiAgICAgaWYgKGNvbnRhaW5lck9iamVjdCAmJiBjb250YWluZXJPYmpl
Y3QtPnN0eWxlKCktPmhhc1BlcnNwZWN0aXZlKCkpIHsKQEAgLTE3MTQsMTUgKzE3MTQsMTMgQEAg
VHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCogY28KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVy
c3BlY3RpdmVNYXRyaXg7CiAgICAgICAgIHBlcnNwZWN0aXZlTWF0cml4LmFwcGx5UGVyc3BlY3Rp
dmUoY29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLT5wZXJzcGVjdGl2ZSgpKTsKICAgICAgICAgCi0g
ICAgICAgIGNvbnRhaW5lclRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNkKC1wZXJzcGVjdGl2ZU9y
aWdpbi54KCksIC1wZXJzcGVjdGl2ZU9yaWdpbi55KCksIDApOwotICAgICAgICBjb250YWluZXJU
cmFuc2Zvcm0ubXVsdGlwbHkocGVyc3BlY3RpdmVNYXRyaXgpOwotICAgICAgICBjb250YWluZXJU
cmFuc2Zvcm0udHJhbnNsYXRlUmlnaHQzZChwZXJzcGVjdGl2ZU9yaWdpbi54KCksIHBlcnNwZWN0
aXZlT3JpZ2luLnkoKSwgMCk7CisgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNkKC1w
ZXJzcGVjdGl2ZU9yaWdpbi54KCksIC1wZXJzcGVjdGl2ZU9yaWdpbi55KCksIDApOworICAgICAg
ICB0cmFuc2Zvcm0ubXVsdGlwbHkocGVyc3BlY3RpdmVNYXRyaXgpOworICAgICAgICB0cmFuc2Zv
cm0udHJhbnNsYXRlUmlnaHQzZChwZXJzcGVjdGl2ZU9yaWdpbi54KCksIHBlcnNwZWN0aXZlT3Jp
Z2luLnkoKSwgMCk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGFpbmVyT2Jq
ZWN0KTsKICNlbmRpZgotCi0gICAgcmV0dXJuIGNvbnRhaW5lclRyYW5zZm9ybTsKIH0KIAogRmxv
YXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFk
JiBsb2NhbFF1YWQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29s
IGZpeGVkKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBkMmM2YzI0Li4zYzBh
ZTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNjg0LDcgKzY4NCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9i
amVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBU
cmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNvbHV0ZVRvTG9j
YWxQb2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikg
Y29uc3Q7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXRJbkNv
bnRhaW5lcikgY29uc3Q7CisgICAgdm9pZCB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXRJbkNvbnRhaW5lciwg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykg
eyB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKaW5kZXggNTAyMWQxZi4uOTI0
M2E5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcApAQCAtMTMyLDE5ICsxMzIs
MzUgQEAgdm9pZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1vdmUoaW50IHgsIGludCB5KQog
ICAgIG1fbGFzdFBsYW5hclF1YWQubW92ZSh4LCB5KTsKIH0KIAordm9pZCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6OnRyYW5zbGF0ZShpbnQgeCwgaW50IHksIGJvb2wgYWNjdW11bGF0ZVRyYW5z
Zm9ybSkKK3sKKyAgICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsgICAg
CisgICAgaWYgKCFhY2N1bXVsYXRlVHJhbnNmb3JtKQorICAgICAgICBmbGF0dGVuV2l0aFRyYW5z
Zm9ybShtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKTsKKworICAgIG1fYWNjdW11bGF0aW5nVHJhbnNm
b3JtID0gYWNjdW11bGF0ZVRyYW5zZm9ybTsKK30KKwogdm9pZCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGU6OmFwcGx5VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm1Gcm9tQ29udGFpbmVyLCBib29sIGFjY3VtdWxhdGVUcmFuc2Zvcm0pCiB7CiAgICAgbV9hY2N1
bXVsYXRlZFRyYW5zZm9ybS5tdWx0TGVmdCh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKTsgICAgCiAg
ICAgaWYgKCFhY2N1bXVsYXRlVHJhbnNmb3JtKQotICAgICAgICBmbGF0dGVuKCk7CisgICAgICAg
IGZsYXR0ZW5XaXRoVHJhbnNmb3JtKG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pOwogCiAgICAgbV9h
Y2N1bXVsYXRpbmdUcmFuc2Zvcm0gPSBhY2N1bXVsYXRlVHJhbnNmb3JtOwogfQogCiB2b2lkIEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6ZmxhdHRlbigpCiB7Ci0gICAgbV9sYXN0UGxhbmFyUG9p
bnQgPSBtYXBwZWRQb2ludCgpOwotICAgIG1fbGFzdFBsYW5hclF1YWQgPSBtYXBwZWRRdWFkKCk7
CisgICAgZmxhdHRlbldpdGhUcmFuc2Zvcm0obV9hY2N1bXVsYXRlZFRyYW5zZm9ybSk7Cit9CisK
K3ZvaWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpmbGF0dGVuV2l0aFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
bnZlcnNlVHJhbnNmb3JtID0gdC5pbnZlcnNlKCk7CisgICAgbV9sYXN0UGxhbmFyUG9pbnQgPSBp
bnZlcnNlVHJhbnNmb3JtLnByb2plY3RQb2ludChtX2xhc3RQbGFuYXJQb2ludCk7CisgICAgbV9s
YXN0UGxhbmFyUXVhZCA9IGludmVyc2VUcmFuc2Zvcm0ucHJvamVjdFF1YWQobV9sYXN0UGxhbmFy
UXVhZCk7CisKICAgICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwogICAg
IG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3Jt
U3RhdGUuaAppbmRleCA1MTkwMTE4Li42MDVjZGQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0
YXRlLmgKQEAgLTk4LDcgKzk4LDggQEAgcHVibGljOgogICAgICAgICBtb3ZlKHMud2lkdGgoKSwg
cy5oZWlnaHQoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOwor
ICAgIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOyAgICAvLyBhbHdheXMgZmxhdHRlbnMKKyAgICB2
b2lkIHRyYW5zbGF0ZShpbnQgeCwgaW50IHksIGJvb2wgYWNjdW11bGF0ZVRyYW5zZm9ybSk7CiAg
ICAgdm9pZCBhcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtRnJvbUNvbnRhaW5lciwgYm9vbCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICBGbG9hdFBv
aW50IG1hcHBlZFBvaW50KCkgY29uc3Q7CiAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQoKSBjb25z
dDsKQEAgLTEyNSw2ICsxMjYsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fYWNjdW11bGF0aW5n
VHJhbnNmb3JtKG90aGVyLm1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKQogICAgIHsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBmbGF0dGVuV2l0aFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29191</attachid>
            <date>2009-04-02 09:11:10 -0700</date>
            <delta_ts>2009-04-02 09:16:48 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>24999_patch.txt</filename>
            <type>text/plain</type>
            <size>10414</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjFmMTg0Yy4uNTg4MzgyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAwOS0wNC0wMiAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQ5OTkKKyAgICAgICAgCisgICAgICAgIE9wdGltaXplIGhpdCB0ZXN0aW5nIHdpdGggdHJh
bnNmb3Jtcy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjptYXBMb2NhbFRvQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQpOgorICAgICAgICBnZXRUcmFu
c2Zvcm1Gcm9tQ29udGFpbmVyKCkgY2hhbmdlIHRvIHJldHVybiB0aGUgbWF0cml4IGJ5IHJlZmVy
ZW5jZS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjp1cGRhdGUzRFRyYW5zZm9ybWVkRGVzY2VuZGFu
dFN0YXR1cyk6CisgICAgICAgIFRoZSBtZXRob2QgZmFpbGVkIHRvIHNldCBtXzNEVHJhbnNmb3Jt
ZWREZXNjZW5kYW50U3RhdHVzRGlydHkgdG8gZmFsc2UsCisgICAgICAgIHNvIGRpZCB0aGUgd29y
ayBldmVyeSB0aW1lLgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpj
cmVhdGVMb2NhbFRyYW5zZm9ybVN0YXRlKToKKyAgICAgICAgT25seSBjYWxsIHRoZSBleHBlbnNp
dmUgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcigpIGlmIHRoZXJlIGlzIGEgdHJhbnNmb3JtLAor
ICAgICAgICBvdGhlcndpc2Ugd2UganVzdCBoYXZlIGEgdHJhbnNsYXRpb24uCisKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6Z2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcik6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oOgorICAgICAgICBDaGFuZ2UgdHJhbnNmb3JtRnJvbUNvbnRhaW5lcigpIHRv
IGdldFRyYW5zZm9ybUZyb21Db250YWluZXIoKSwgYW5kIHJldHVybgorICAgICAgICB0aGUgbWF0
cml4IGJ5IHJlZmVyZW5jZSB0byByZWR1Y2UgY29weWluZy4KKyAgICAgICAgCisgICAgICAgICog
cmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZTo6dHJhbnNsYXRlKToKKyAgICAgICAgTmV3IG1ldGhvZCB0aGF0IGFk
ZHMgYSB0cmFuc2xhdGlvbiB0byB0aGUgYWNjdW11bGF0ZWQgbWF0cml4LCBvcHRpb25hbGx5Cisg
ICAgICAgIHdpdGhvdXQgZmxhdHRlbmluZy4gQ2hlYXBlciB0aGFuIGFwcGx5VHJhbnNmb3JtKCku
CisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6SGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjph
cHBseVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJhbnNmb3JtU3Rh
dGU6OmZsYXR0ZW4pOgorICAgICAgICBVc2UgZmxhdHRlbldpdGhUcmFuc2Zvcm0oKS4KKyAgICAg
ICAgCisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6OmZsYXR0ZW5X
aXRoVHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaDoKKyAg
ICAgICAgQWRkIGZsYXR0ZW5XaXRoVHJhbnNmb3JtKCksIHdoaWNoIGlzIGEgaGVscGVyIHRoYXQg
YWxsb3dzIHVzIHRvCisgICAgICAgIGF2b2lkIGRvaW5nIHRoZSBpbnZlcnNlKCkgdHdpY2UuCisg
ICAgICAgCisKIDIwMDktMDQtMDEgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNv
bT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5
OTcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAgYi9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCmluZGV4IGRhZTU5ZTIuLmQxZDIyYmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcApAQCAtOTY5LDkgKzk2OSwxMSBAQCB2b2lkIFJlbmRlckJveDo6bWFw
TG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwg
Ym9vbAogICAgIEludFNpemUgY29udGFpbmVyT2Zmc2V0ID0gb2Zmc2V0RnJvbUNvbnRhaW5lcihv
KTsKIAogICAgIGJvb2wgcHJlc2VydmUzRCA9IHVzZVRyYW5zZm9ybXMgJiYgKG8tPnN0eWxlKCkt
PnByZXNlcnZlczNEKCkgfHwgc3R5bGUoKS0+cHJlc2VydmVzM0QoKSk7Ci0gICAgaWYgKHVzZVRy
YW5zZm9ybXMgJiYgaGFzVHJhbnNmb3JtKQotICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5hcHBseVRy
YW5zZm9ybSh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKG8sIGNvbnRhaW5lck9mZnNldCksIHByZXNl
cnZlM0QpOwotICAgIGVsc2UKKyAgICBpZiAodXNlVHJhbnNmb3JtcyAmJiBoYXNUcmFuc2Zvcm0p
IHsKKyAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdDsKKyAgICAgICAgZ2V0VHJhbnNmb3Jt
RnJvbUNvbnRhaW5lcihvLCBjb250YWluZXJPZmZzZXQsIHQpOworICAgICAgICB0cmFuc2Zvcm1T
dGF0ZS5hcHBseVRyYW5zZm9ybSh0LCBwcmVzZXJ2ZTNEKTsKKyAgICB9IGVsc2UKICAgICAgICAg
dHJhbnNmb3JtU3RhdGUubW92ZShjb250YWluZXJPZmZzZXQud2lkdGgoKSwgY29udGFpbmVyT2Zm
c2V0LmhlaWdodCgpLCBwcmVzZXJ2ZTNEKTsKIAogICAgIG8tPm1hcExvY2FsVG9Db250YWluZXIo
cmVwYWludENvbnRhaW5lciwgZml4ZWQsIHVzZVRyYW5zZm9ybXMsIHRyYW5zZm9ybVN0YXRlKTsK
QEAgLTk5OCw5ICsxMDAwLDExIEBAIHZvaWQgUmVuZGVyQm94OjptYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9yCiAgICAgSW50U2l6
ZSBjb250YWluZXJPZmZzZXQgPSBvZmZzZXRGcm9tQ29udGFpbmVyKG8pOwogCiAgICAgYm9vbCBw
cmVzZXJ2ZTNEID0gdXNlVHJhbnNmb3JtcyAmJiAoby0+c3R5bGUoKS0+cHJlc2VydmVzM0QoKSB8
fCBzdHlsZSgpLT5wcmVzZXJ2ZXMzRCgpKTsKLSAgICBpZiAodXNlVHJhbnNmb3JtcyAmJiBoYXNU
cmFuc2Zvcm0pCi0gICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9y
bUZyb21Db250YWluZXIobywgY29udGFpbmVyT2Zmc2V0KSwgcHJlc2VydmUzRCk7Ci0gICAgZWxz
ZQorICAgIGlmICh1c2VUcmFuc2Zvcm1zICYmIGhhc1RyYW5zZm9ybSkgeworICAgICAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0OworICAgICAgICBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKG8s
IGNvbnRhaW5lck9mZnNldCwgdCk7CisgICAgICAgIHRyYW5zZm9ybVN0YXRlLmFwcGx5VHJhbnNm
b3JtKHQsIHByZXNlcnZlM0QpOworICAgIH0gZWxzZQogICAgICAgICB0cmFuc2Zvcm1TdGF0ZS5t
b3ZlKC1jb250YWluZXJPZmZzZXQud2lkdGgoKSwgLWNvbnRhaW5lck9mZnNldC5oZWlnaHQoKSwg
cHJlc2VydmUzRCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA2ODBlMWZi
Li5jODRmMGVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
KysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00ODYsNiArNDg2LDgg
QEAgYm9vbCBSZW5kZXJMYXllcjo6dXBkYXRlM0RUcmFuc2Zvcm1lZERlc2NlbmRhbnRTdGF0dXMo
KQogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbmVnWk9yZGVyTGlzdC0+
c2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgbV9oYXMzRFRyYW5zZm9ybWVkRGVzY2VuZGFu
dCB8PSBtX25lZ1pPcmRlckxpc3QtPmF0KGkpLT51cGRhdGUzRFRyYW5zZm9ybWVkRGVzY2VuZGFu
dFN0YXR1cygpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtXzNEVHJhbnNmb3JtZWRE
ZXNjZW5kYW50U3RhdHVzRGlydHkgPSBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgLy8gSWYgd2Ug
bGl2ZSBpbiBhIDNkIGhpZXJhcmNoeSwgdGhlbiB0aGUgbGF5ZXIgYXQgdGhlIHJvb3Qgb2YgdGhh
dCBoaWVyYXJjaHkgbmVlZHMKQEAgLTIxODUsOCArMjE4NywxNCBAQCBQYXNzUmVmUHRyPEhpdFRl
c3RpbmdUcmFuc2Zvcm1TdGF0ZT4gUmVuZGVyTGF5ZXI6OmNyZWF0ZUxvY2FsVHJhbnNmb3JtU3Rh
dGUoUmVuZAogICAgICAgICBjb252ZXJ0VG9MYXllckNvb3Jkcyhyb290TGF5ZXIsIG9mZnNldFgs
IG9mZnNldFkpOwogICAgIH0KICAgICAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250YWlu
ZXJUcmFuc2Zvcm0gPSByZW5kZXJlcigpLT50cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5l
ckxheWVyID8gY29udGFpbmVyTGF5ZXItPnJlbmRlcmVyKCkgOiAwLCBJbnRTaXplKG9mZnNldFgs
IG9mZnNldFkpKTsKLSAgICB0cmFuc2Zvcm1TdGF0ZS0+YXBwbHlUcmFuc2Zvcm0oY29udGFpbmVy
VHJhbnNmb3JtLCB0cnVlKTsKKyAgICBpZiAodHJhbnNmb3JtKCkpIHsKKyAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggY29udGFpbmVyVHJhbnNmb3JtOworICAgICAgICByZW5kZXJlcigpLT5n
ZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnRhaW5lckxheWVyID8gY29udGFpbmVyTGF5ZXIt
PnJlbmRlcmVyKCkgOiAwLCBJbnRTaXplKG9mZnNldFgsIG9mZnNldFkpLCBjb250YWluZXJUcmFu
c2Zvcm0pOworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS0+YXBwbHlUcmFuc2Zvcm0oY29udGFpbmVy
VHJhbnNmb3JtLCB0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0cmFuc2Zvcm1TdGF0ZS0+
dHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFksIHRydWUpOworICAgIH0KKyAgICAKICAgICByZXR1
cm4gdHJhbnNmb3JtU3RhdGU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4
IDFhYmM1ZWYuLmUwNzIzYjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTY5
NywxMyArMTY5NywxMyBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFwQWJzb2x1dGVUb0xvY2FsUG9p
bnQoYm9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFucwogICAgIH0KIH0KIAotVHJh
bnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNv
bnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0LCBjb25zdCBJbnRTaXplJiBvZmZzZXRJ
bkNvbnRhaW5lcikgY29uc3QKK3ZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUcmFuc2Zvcm1Gcm9tQ29u
dGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyT2JqZWN0LCBjb25zdCBJbnRTaXpl
JiBvZmZzZXRJbkNvbnRhaW5lciwgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgY29u
c3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250YWluZXJUcmFuc2Zvcm07Ci0gICAg
Y29udGFpbmVyVHJhbnNmb3JtLnRyYW5zbGF0ZShvZmZzZXRJbkNvbnRhaW5lci53aWR0aCgpLCBv
ZmZzZXRJbkNvbnRhaW5lci5oZWlnaHQoKSk7CisgICAgdHJhbnNmb3JtLm1ha2VJZGVudGl0eSgp
OworICAgIHRyYW5zZm9ybS50cmFuc2xhdGUob2Zmc2V0SW5Db250YWluZXIud2lkdGgoKSwgb2Zm
c2V0SW5Db250YWluZXIuaGVpZ2h0KCkpOwogICAgIFJlbmRlckxheWVyKiBsYXllcjsKICAgICBp
ZiAoaGFzTGF5ZXIoKSAmJiAobGF5ZXIgPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHRoaXMpLT5s
YXllcigpKSAmJiBsYXllci0+dHJhbnNmb3JtKCkpCi0gICAgICAgIGNvbnRhaW5lclRyYW5zZm9y
bS5tdWx0TGVmdChsYXllci0+Y3VycmVudFRyYW5zZm9ybSgpKTsKKyAgICAgICAgdHJhbnNmb3Jt
Lm11bHRMZWZ0KGxheWVyLT5jdXJyZW50VHJhbnNmb3JtKCkpOwogICAgIAogI2lmIEVOQUJMRSgz
RF9SRU5ERVJJTkcpCiAgICAgaWYgKGNvbnRhaW5lck9iamVjdCAmJiBjb250YWluZXJPYmplY3Qt
PnN0eWxlKCktPmhhc1BlcnNwZWN0aXZlKCkpIHsKQEAgLTE3MTQsMTUgKzE3MTQsMTMgQEAgVHJh
bnNmb3JtYXRpb25NYXRyaXggUmVuZGVyT2JqZWN0Ojp0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNv
bnN0IFJlbmRlck9iamVjdCogY28KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3Bl
Y3RpdmVNYXRyaXg7CiAgICAgICAgIHBlcnNwZWN0aXZlTWF0cml4LmFwcGx5UGVyc3BlY3RpdmUo
Y29udGFpbmVyT2JqZWN0LT5zdHlsZSgpLT5wZXJzcGVjdGl2ZSgpKTsKICAgICAgICAgCi0gICAg
ICAgIGNvbnRhaW5lclRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNkKC1wZXJzcGVjdGl2ZU9yaWdp
bi54KCksIC1wZXJzcGVjdGl2ZU9yaWdpbi55KCksIDApOwotICAgICAgICBjb250YWluZXJUcmFu
c2Zvcm0ubXVsdGlwbHkocGVyc3BlY3RpdmVNYXRyaXgpOwotICAgICAgICBjb250YWluZXJUcmFu
c2Zvcm0udHJhbnNsYXRlUmlnaHQzZChwZXJzcGVjdGl2ZU9yaWdpbi54KCksIHBlcnNwZWN0aXZl
T3JpZ2luLnkoKSwgMCk7CisgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGVSaWdodDNkKC1wZXJz
cGVjdGl2ZU9yaWdpbi54KCksIC1wZXJzcGVjdGl2ZU9yaWdpbi55KCksIDApOworICAgICAgICB0
cmFuc2Zvcm0ubXVsdGlwbHkocGVyc3BlY3RpdmVNYXRyaXgpOworICAgICAgICB0cmFuc2Zvcm0u
dHJhbnNsYXRlUmlnaHQzZChwZXJzcGVjdGl2ZU9yaWdpbi54KCksIHBlcnNwZWN0aXZlT3JpZ2lu
LnkoKSwgMCk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGFpbmVyT2JqZWN0
KTsKICNlbmRpZgotCi0gICAgcmV0dXJuIGNvbnRhaW5lclRyYW5zZm9ybTsKIH0KIAogRmxvYXRR
dWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0NvbnRhaW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiBs
b2NhbFF1YWQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGZp
eGVkKSBjb25zdApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBkMmM2YzI0Li5jYWQwNDMw
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNjg0LDcgKzY4NCw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgbWFwTG9jYWxUb0NvbnRhaW5lcihSZW5kZXJCb3hNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sIGZpeGVkLCBUcmFu
c2Zvcm1TdGF0ZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBtYXBBYnNvbHV0ZVRvTG9jYWxQ
b2ludChib29sIGZpeGVkLCBib29sIHVzZVRyYW5zZm9ybXMsIFRyYW5zZm9ybVN0YXRlJikgY29u
c3Q7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNv
bnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXRJbkNvbnRh
aW5lcikgY29uc3Q7CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1Gcm9tQ29udGFpbmVyKGNvbnN0IFJl
bmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZzZXRJbkNvbnRhaW5lciwg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiwgaW50IC8qdHgqLywgaW50IC8qdHkqLykg
eyB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAg
Yi9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5jcHAKaW5kZXggNTAyMWQxZi4uOTI0
M2E5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwCisr
KyBiL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcApAQCAtMTMyLDE5ICsxMzIs
MzUgQEAgdm9pZCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGU6Om1vdmUoaW50IHgsIGludCB5KQog
ICAgIG1fbGFzdFBsYW5hclF1YWQubW92ZSh4LCB5KTsKIH0KIAordm9pZCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGU6OnRyYW5zbGF0ZShpbnQgeCwgaW50IHksIGJvb2wgYWNjdW11bGF0ZVRyYW5z
Zm9ybSkKK3sKKyAgICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLnRyYW5zbGF0ZSh4LCB5KTsgICAg
CisgICAgaWYgKCFhY2N1bXVsYXRlVHJhbnNmb3JtKQorICAgICAgICBmbGF0dGVuV2l0aFRyYW5z
Zm9ybShtX2FjY3VtdWxhdGVkVHJhbnNmb3JtKTsKKworICAgIG1fYWNjdW11bGF0aW5nVHJhbnNm
b3JtID0gYWNjdW11bGF0ZVRyYW5zZm9ybTsKK30KKwogdm9pZCBIaXRUZXN0aW5nVHJhbnNmb3Jt
U3RhdGU6OmFwcGx5VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm1Gcm9tQ29udGFpbmVyLCBib29sIGFjY3VtdWxhdGVUcmFuc2Zvcm0pCiB7CiAgICAgbV9hY2N1
bXVsYXRlZFRyYW5zZm9ybS5tdWx0TGVmdCh0cmFuc2Zvcm1Gcm9tQ29udGFpbmVyKTsgICAgCiAg
ICAgaWYgKCFhY2N1bXVsYXRlVHJhbnNmb3JtKQotICAgICAgICBmbGF0dGVuKCk7CisgICAgICAg
IGZsYXR0ZW5XaXRoVHJhbnNmb3JtKG1fYWNjdW11bGF0ZWRUcmFuc2Zvcm0pOwogCiAgICAgbV9h
Y2N1bXVsYXRpbmdUcmFuc2Zvcm0gPSBhY2N1bXVsYXRlVHJhbnNmb3JtOwogfQogCiB2b2lkIEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZTo6ZmxhdHRlbigpCiB7Ci0gICAgbV9sYXN0UGxhbmFyUG9p
bnQgPSBtYXBwZWRQb2ludCgpOwotICAgIG1fbGFzdFBsYW5hclF1YWQgPSBtYXBwZWRRdWFkKCk7
CisgICAgZmxhdHRlbldpdGhUcmFuc2Zvcm0obV9hY2N1bXVsYXRlZFRyYW5zZm9ybSk7Cit9CisK
K3ZvaWQgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlOjpmbGF0dGVuV2l0aFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
bnZlcnNlVHJhbnNmb3JtID0gdC5pbnZlcnNlKCk7CisgICAgbV9sYXN0UGxhbmFyUG9pbnQgPSBp
bnZlcnNlVHJhbnNmb3JtLnByb2plY3RQb2ludChtX2xhc3RQbGFuYXJQb2ludCk7CisgICAgbV9s
YXN0UGxhbmFyUXVhZCA9IGludmVyc2VUcmFuc2Zvcm0ucHJvamVjdFF1YWQobV9sYXN0UGxhbmFy
UXVhZCk7CisKICAgICBtX2FjY3VtdWxhdGVkVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwogICAg
IG1fYWNjdW11bGF0aW5nVHJhbnNmb3JtID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3JlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3Jt
U3RhdGUuaAppbmRleCA1MTkwMTE4Li42MDVjZGQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9UcmFuc2Zvcm1TdGF0ZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0
YXRlLmgKQEAgLTk4LDcgKzk4LDggQEAgcHVibGljOgogICAgICAgICBtb3ZlKHMud2lkdGgoKSwg
cy5oZWlnaHQoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOwor
ICAgIHZvaWQgbW92ZShpbnQgeCwgaW50IHkpOyAgICAvLyBhbHdheXMgZmxhdHRlbnMKKyAgICB2
b2lkIHRyYW5zbGF0ZShpbnQgeCwgaW50IHksIGJvb2wgYWNjdW11bGF0ZVRyYW5zZm9ybSk7CiAg
ICAgdm9pZCBhcHBseVRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtRnJvbUNvbnRhaW5lciwgYm9vbCBhY2N1bXVsYXRlVHJhbnNmb3JtKTsKICAgICBGbG9hdFBv
aW50IG1hcHBlZFBvaW50KCkgY29uc3Q7CiAgICAgRmxvYXRRdWFkIG1hcHBlZFF1YWQoKSBjb25z
dDsKQEAgLTEyNSw2ICsxMjYsOCBAQCBwcml2YXRlOgogICAgICAgICAsIG1fYWNjdW11bGF0aW5n
VHJhbnNmb3JtKG90aGVyLm1fYWNjdW11bGF0aW5nVHJhbnNmb3JtKQogICAgIHsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBmbGF0dGVuV2l0aFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="14474"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>