<?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>31692</bug_id>
          
          <creation_ts>2009-11-19 15:15:04 -0800</creation_ts>
          <short_desc>window.onblur() calling window.focus leaves focus in 2 places</short_desc>
          <delta_ts>2010-02-05 10:44:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jay Campan">jcampan</reporter>
          <assigned_to name="Victor Wang">victorw</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>victorw</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165114</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Campan">jcampan</who>
    <bug_when>2009-11-19 15:15:04 -0800</bug_when>
    <thetext>Open the attached file, iframe.html
- Click the textfield at the top of the page
- Click the textfield in the iframe Google page.

Expected:
- the focus ends up back in the top textfield (as the JavaScript code on window.onblur calls window.focus())

Actual:
- Both textfields are showing a blinking cursor.

Notes:
- Also note that extra blur/focus events are fired.
- Some investigation on what happens:

EventHandler::handleMousePressEvent(const PlatformMouseEvent&amp; mouseEvent) dispatches the event to 
the IFrame node which causes the IFrame to get focus. As part of the windown.onblur, the JS 
restores the focus to the main frame.

But after that, it calls handleMousePressEvent(const MouseEventWithHitTestResults&amp; event) 
(different signature) which itself calls focusDocumentView() which focus again the IFrame 
triggering another cycle of onblur/onfocus, and leaving the focus controller apparently confused 
(the 2 frames are shown as having focus).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182421</commentid>
    <comment_count>1</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-01-19 13:36:45 -0800</bug_when>
    <thetext>As Jay pointed out above, the problem is caused by the focused frame in FocusController is messed up if window.onblur calls window.focus. When user clicks iframe to switch focus from main frame to iframe, FocusController::setFocusedFrame fires onblur event, which calls window.focus and then calls setFocusedFrame again to switch back. This messes up the old focused frame and new focused frame and leaves the FocusController confused. As a result, controlls in both main frame and iframe look like get focused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182424</commentid>
    <comment_count>2</comment_count>
      <attachid>46946</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-01-19 13:37:39 -0800</bug_when>
    <thetext>Created attachment 46946
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182486</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-19 15:35:57 -0800</bug_when>
    <thetext>What if window.onfocus calls window.focus on a different window?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182563</commentid>
    <comment_count>4</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-01-19 17:53:42 -0800</bug_when>
    <thetext>Hi Darin,

Good point.

This patch only affects focusing when switching focused frame, so I tested calling iframe window focus from window.onfocus. Because of the new flag, setFocusedFrame returns when FocusController is in the middle of changing focused frame, therefore, in this case with the patch, the iframe window focus request is ignored.

The code prior the patch calls dispatchWindowEvent(win1.focusEvent) inside another dispatchWindowEvent(win2.focusEvent), the focus event is dispatched at almost the last step of setFocusedFrame, so it changes the focus back to iframe. In this case, webkit changes focus to one frame when it is in the middle of setting focus to another one, I might miss something even though the FocusController status looks fine to me.

I test this on IE and Firefox:
IE looks like ignore the iframe window focus call and behaves the same as webkit with my patch.
FireFox messes up the focus status and leaves two fields both focused.

Personally I think we should add this flag so changing focused frame request is ignored if FocusController is middle of processing another request. Same for onblur calling focus and onfocus calling focus. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184304</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-25 09:49:02 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Personally I think we should add this flag so changing focused frame request is
&gt; ignored if FocusController is middle of processing another request. Same for
&gt; onblur calling focus and onfocus calling focus. What do you think?

Seems OK. The real point is having enough test cases; how we implement is not as important as what the observed behavior is. I worry that there will be insufficient test coverage. Lets think of more edge and common cases and make tests that cover a lot of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185130</commentid>
    <comment_count>6</comment_count>
      <attachid>47545</attachid>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-01-27 09:41:49 -0800</bug_when>
    <thetext>Created attachment 47545
More test cases added

Added more cases to test: Normally changing frame focus working as expected and FocusController only allows one changing focus request at a time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186020</commentid>
    <comment_count>7</comment_count>
    <who name="Victor Wang">victorw</who>
    <bug_when>2010-01-29 17:25:46 -0800</bug_when>
    <thetext>Manually committed r54082: http://trac.webkit.org/changeset/54082</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46946</attachid>
            <date>2010-01-19 13:37:39 -0800</date>
            <delta_ts>2010-01-19 15:35:34 -0800</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>onblur-focus.patch</filename>
            <type>text/plain</type>
            <size>9939</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzM0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDEtMTUgIFZpY3RvciBXYW5nICA8dmljdG9yd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IHRoZSBpc3N1ZSB0aGF0IGJvdGggbWFpbiBmcm9tZSBhbmQgaWZyYW1lIGFyZSBmb2N1c2Vk
CisgICAgICAgIGlmIHdpbmRvdy5vbmJsdXIgY2FsbHMgd2luZG93LmZvY3VzLgorICAgICAgICBB
bHNvIGZpeCB0aGUgY29kaW5nIHN0eWxlIGluIEZvY3VzQ29udHJvbGxlci5oLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTY5MgorCisgICAgICAg
IFRoZSBwcm9ibGVtIGlzIGNhdXNlZCBieSB0aGUgZm9jdXNlZCBmcmFtZSBpbiBGb2N1c0NvbnRy
b2xsZXIKKyAgICAgICAgaXMgbWVzc2VkIHVwIGlmIHdpbmRvdy5vbmJsdXIgY2FsbHMgd2luZG93
LmZvY3VzOgorICAgICAgICBXaGVuIHVzZXIgY2xpY2tzIGlmcmFtZSB0byBzd2l0Y2ggZm9jdXMg
ZnJvbSBtYWluIGZyYW1lIHRvIGlmcmFtZSwKKyAgICAgICAgRm9jdXNDb250cm9sbGVyOjpzZXRG
b2N1c2VkRnJhbWUgZmlyZXMgb25ibHVyIGV2ZW50LCB3aGljaCBjYWxscworICAgICAgICB3aW5k
b3cuZm9jdXMgYW5kIHRoZW4gY2FsbHMgc2V0Rm9jdXNlZEZyYW1lIGFnYWluIHRvIHN3aXRjaCBi
YWNrLgorICAgICAgICBUaGlzIG1lc3NlcyB1cCB0aGUgb2xkIGZvY3VzZWQgZnJhbWUgYW5kIG5l
dyBmb2N1c2VkIGZyYW1lIGFuZAorICAgICAgICBsZWF2ZXMgdGhlIEZvY3VzQ29udHJvbGxlciBj
b25mdXNlZC4gQXMgYSByZXN1bHQsIGNvbnRyb2xscworICAgICAgICBpbiBib3RoIG1haW4gZnJh
bWUgYW5kIGlmcmFtZSBsb29rIGxpa2UgZ2V0IGZvY3VzZWQuCisKKyAgICAgICAgVG8gZml4IGl0
LCBhZGQgYSBmbGFnIHRvIEZvY3VzQ29udHJvbGxlciBhbmQgZG8gbm8gc3dpdGNoIHRoZSBmb2N1
c2VkCisgICAgICAgIGZyYW1lIHdoZW4gRm9jdXNDb250cm9sbGVyIGlzIGluIHRoZSBtaWRkbGUg
b2YgY2hhbmdpbmcgdGhlIGZvY3VzZWQgZnJhbWUuIAorCisgICAgICAgIFRlc3Q6IGZhc3QvZXZl
bnRzL2ZyYW1lLXdpbmRvdy1ibHVyLWNhbGxpbmctZm9jdXMuaHRtbAorCisgICAgICAgICogcGFn
ZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVy
OjpGb2N1c0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpz
ZXRGb2N1c2VkRnJhbWUpOgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmZvY3VzZWRGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkZv
Y3VzQ29udHJvbGxlcjo6aXNGb2N1c2VkKToKKwogMjAxMC0wMS0xNSAgRGFyaW4gRmlzaGVyICA8
ZGFyaW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJyYWR5IEVpZHNvbi4K
SW5kZXg6IFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA1MzI2OSkKKysrIFdlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4
IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkZy
YW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93
bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJk
RXZlbnQuaCIKQEAgLTcyLDE0ICs3MiwxNyBAQCBGb2N1c0NvbnRyb2xsZXI6OkZvY3VzQ29udHJv
bGxlcihQYWdlKiBwCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1faXNBY3RpdmUoZmFsc2Up
CiAgICAgLCBtX2lzRm9jdXNlZChmYWxzZSkKKyAgICAsIG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFt
ZShmYWxzZSkKIHsKIH0KIAogdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRGcmFtZShQ
YXNzUmVmUHRyPEZyYW1lPiBmcmFtZSkKIHsKLSAgICBpZiAobV9mb2N1c2VkRnJhbWUgPT0gZnJh
bWUpCisgICAgaWYgKG1fZm9jdXNlZEZyYW1lID09IGZyYW1lIHx8IG1faXNDaGFuZ2luZ0ZvY3Vz
ZWRGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgbV9pc0NoYW5naW5nRm9jdXNlZEZyYW1l
ID0gdHJ1ZTsKKwogICAgIFJlZlB0cjxGcmFtZT4gb2xkRnJhbWUgPSBtX2ZvY3VzZWRGcmFtZTsK
ICAgICBSZWZQdHI8RnJhbWU+IG5ld0ZyYW1lID0gZnJhbWU7CiAKQEAgLTk1LDYgKzk4LDggQEAg
dm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRGcmFtZShQYQogICAgICAgICBuZXdGcmFt
ZS0+c2VsZWN0aW9uKCktPnNldEZvY3VzZWQodHJ1ZSk7CiAgICAgICAgIG5ld0ZyYW1lLT5kb2N1
bWVudCgpLT5kaXNwYXRjaFdpbmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmZv
Y3VzRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogICAgIH0KKworICAgIG1faXNDaGFuZ2luZ0ZvY3Vz
ZWRGcmFtZSA9IGZhbHNlOwogfQogCiBGcmFtZSogRm9jdXNDb250cm9sbGVyOjpmb2N1c2VkT3JN
YWluRnJhbWUoKQpJbmRleDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gNTMyNjkpCisr
KyBXZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDM2
ICszMywzNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGcmFtZTsKLSAg
ICBjbGFzcyBLZXlib2FyZEV2ZW50OwotICAgIGNsYXNzIE5vZGU7Ci0gICAgY2xhc3MgUGFnZTsK
LQotICAgIGNsYXNzIEZvY3VzQ29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAg
cHVibGljOgotICAgICAgICBGb2N1c0NvbnRyb2xsZXIoUGFnZSopOwotCi0gICAgICAgIHZvaWQg
c2V0Rm9jdXNlZEZyYW1lKFBhc3NSZWZQdHI8RnJhbWU+KTsKLSAgICAgICAgRnJhbWUqIGZvY3Vz
ZWRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZEZyYW1lLmdldCgpOyB9Ci0gICAgICAg
IEZyYW1lKiBmb2N1c2VkT3JNYWluRnJhbWUoKTsKK2NsYXNzIEZyYW1lOworY2xhc3MgS2V5Ym9h
cmRFdmVudDsKK2NsYXNzIE5vZGU7CitjbGFzcyBQYWdlOworCitjbGFzcyBGb2N1c0NvbnRyb2xs
ZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIEZvY3VzQ29udHJvbGxlcihQ
YWdlKik7CisKKyAgICB2b2lkIHNldEZvY3VzZWRGcmFtZShQYXNzUmVmUHRyPEZyYW1lPik7Cisg
ICAgRnJhbWUqIGZvY3VzZWRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZEZyYW1lLmdl
dCgpOyB9CisgICAgRnJhbWUqIGZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgICAgIGJvb2wg
c2V0SW5pdGlhbEZvY3VzKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAg
IGJvb2wgYWR2YW5jZUZvY3VzKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgYm9vbCBp
bml0aWFsRm9jdXMgPSBmYWxzZSk7CisgICAgYm9vbCBzZXRJbml0aWFsRm9jdXMoRm9jdXNEaXJl
Y3Rpb24sIEtleWJvYXJkRXZlbnQqKTsKKyAgICBib29sIGFkdmFuY2VGb2N1cyhGb2N1c0RpcmVj
dGlvbiwgS2V5Ym9hcmRFdmVudCosIGJvb2wgaW5pdGlhbEZvY3VzID0gZmFsc2UpOwogICAgICAg
ICAKLSAgICAgICAgYm9vbCBzZXRGb2N1c2VkTm9kZShOb2RlKiwgUGFzc1JlZlB0cjxGcmFtZT4p
OworICAgIGJvb2wgc2V0Rm9jdXNlZE5vZGUoTm9kZSosIFBhc3NSZWZQdHI8RnJhbWU+KTsKIAot
ICAgICAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKLSAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faXNBY3RpdmU7IH0KKyAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKKyAg
ICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9pc0FjdGl2ZTsgfQogCi0gICAgICAg
IHZvaWQgc2V0Rm9jdXNlZChib29sKTsKLSAgICAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzRm9jdXNlZDsgfQorICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKKyAgICBi
b29sIGlzRm9jdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAKLSAgICBwcml2
YXRlOgotICAgICAgICBQYWdlKiBtX3BhZ2U7Ci0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mb2N1
c2VkRnJhbWU7Ci0gICAgICAgIGJvb2wgbV9pc0FjdGl2ZTsKLSAgICAgICAgYm9vbCBtX2lzRm9j
dXNlZDsKLSAgICB9OworcHJpdmF0ZToKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgUmVmUHRyPEZy
YW1lPiBtX2ZvY3VzZWRGcmFtZTsKKyAgICBib29sIG1faXNBY3RpdmU7CisgICAgYm9vbCBtX2lz
Rm9jdXNlZDsKKyAgICBib29sIG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZTsKK307CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzMzQ2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAt
MDEtMTUgIFZpY3RvciBXYW5nICA8dmljdG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSBpc3N1ZSB0aGF0IGJv
dGggbWFpbiBmcm9tZSBhbmQgaWZyYW1lIGFyZQorICAgICAgICBmb2N1c2VkIGlmIHdpbmRvdy5v
bmJsdXIgY2FsbHMgd2luZG93LmZvY3VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzE2OTIKKworICAgICAgICBUaGUgcHJvYmxlbSBpcyBjYXVzZWQg
YnkgdGhlIGZvY3VzZWQgZnJhbWUgaW4gRm9jdXNDb250cm9sbGVyCisgICAgICAgIGlzIG1lc3Nl
ZCB1cCBpZiB3aW5kb3cub25ibHVyIGNhbGxzIHdpbmRvdy5mb2N1czoKKyAgICAgICAgV2hlbiB1
c2VyIGNsaWNrcyBpZnJhbWUgdG8gc3dpdGNoIGZvY3VzIGZyb20gbWFpbiBmcmFtZSB0byBpZnJh
bWUsCisgICAgICAgIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEZyYW1lIGZpcmVzIG9uYmx1
ciBldmVudCwgd2hpY2ggY2FsbHMKKyAgICAgICAgd2luZG93LmZvY3VzIGFuZCB0aGVuIGNhbGxz
IHNldEZvY3VzZWRGcmFtZSBhZ2FpbiB0byBzd2l0Y2ggYmFjay4KKyAgICAgICAgVGhpcyBtZXNz
ZXMgdXAgdGhlIG9sZCBmb2N1c2VkIGZyYW1lIGFuZCBuZXcgZm9jdXNlZCBmcmFtZSBhbmQKKyAg
ICAgICAgbGVhdmVzIHRoZSBGb2N1c0NvbnRyb2xsZXIgY29uZnVzZWQuIEFzIGEgcmVzdWx0LCBj
b250cm9sbHMKKyAgICAgICAgaW4gYm90aCBtYWluIGZyYW1lIGFuZCBpZnJhbWUgbG9vayBsaWtl
IGdldCBmb2N1c2VkLgorCisgICAgICAgIFRvIGZpeCBpdCwgYWRkIGEgZmxhZyB0byBGb2N1c0Nv
bnRyb2xsZXIgYW5kIGRvIG5vIHN3aXRjaCB0aGUgZm9jdXNlZAorICAgICAgICBmcmFtZSB3aGVu
IEZvY3VzQ29udHJvbGxlciBpcyBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIHRoZSBmb2N1c2Vk
IGZyYW1lLiAKKworICAgICAgICAqIGZhc3QvZXZlbnRzL2ZyYW1lLXdpbmRvdy1ibHVyLWNhbGxp
bmctZm9jdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9mcmFt
ZS13aW5kb3ctYmx1ci1jYWxsaW5nLWZvY3VzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTAxLTE1ICBE
YXJpbiBGaXNoZXIgIDxkYXJpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QnJhZHkgRWlkc29uLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZnJhbWUtd2luZG93
LWJsdXItY2FsbGluZy1mb2N1cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9ldmVudHMvZnJhbWUtd2luZG93LWJsdXItY2FsbGluZy1mb2N1cy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9mcmFtZS13aW5kb3ct
Ymx1ci1jYWxsaW5nLWZvY3VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MCBAQAorbWFpbiBmcmFtZSBpbnB1dCBmaWVsZDogCisKK1RoaXMgcGFnZSB0ZXN0cyB0aGF0IG9u
bHkgb25lIGZpZWxkIGlzIGZvY3VzZWQgaWYgd2luZG93Lm9uYmx1ciBjYWxscyB3aW5kb3cuZm9j
dXMuIAorVG8gdGVzdCwgY2xpY2sgdGhlIG1haW5mcmFtZSBpbnB1dCBmaWVsZCBhbmQgdGhlbiBj
bGljayBvbiB0aGUgaW5wdXQgZmllbGQgaW5zaWRlIHRoZSBpZnJhbWUuIAorVGVzdCBwYXNzZXMg
aWYgb25seSBvbmUgb2YgdGhlIGlucHV0IGZpZWxkIGdldHMgZm9jdXNlZCBhdCBhIHRpbWUuCisK
K3dpbmRvdyBibHVycmVkCit3aW5kb3cgZm9jdXNlZAord2luZG93IGJsdXJyZWQKKwoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZnJhbWUtd2luZG93LWJsdXIt
Y2FsbGluZy1mb2N1cy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxl
CiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvZnJhbWUtd2luZG93
LWJsdXItY2FsbGluZy1mb2N1cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
ZXZlbnRzL2ZyYW1lLXdpbmRvdy1ibHVyLWNhbGxpbmctZm9jdXMuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2ZyYW1lLXdpbmRvdy1ibHVyLWNhbGxpbmctZm9j
dXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0PgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKSB7CisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnbG9nJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdCgp
IHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHdpbmRvdy5vbmZvY3VzID0gZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICAgICAgbG9nKCd3aW5kb3cgZm9jdXNlZCcpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgd2luZG93Lm9uYmx1ciA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIGxvZygnd2lu
ZG93IGJsdXJyZWQnKTsKKyAgICAgICAgICAgICAgICB3aW5kb3cuZm9jdXMoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICAg
ICAgICAgIHZhciBtYWluSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbklucHV0
Iik7CisgICAgICAgICAgICAgICAgdmFyIGlmcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZnJhbWUiKTsKKyAgICAgICAgICAgICAgICB2YXIgaWZyYW1lSW5wdXQgPSB3aW5kb3cuZnJhbWVz
WyJmcmFtZSJdLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpZnJhbWVJbnB1dCIpOworCisgICAg
ICAgICAgICAgICAgLy8gY2xpY2sgdGhlIGlmcmFtZSBpbnB1dCBmaWVsZC4KKyAgICAgICAgICAg
ICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhpZnJtLm9mZnNldExlZnQgKyBpZnJhbWVJbnB1
dC5vZmZzZXRMZWZ0ICsgMTAsIGlmcm0ub2Zmc2V0VG9wICsgaWZyYW1lSW5wdXQub2Zmc2V0VG9w
ICsgNSk7CisgICAgICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgICAg
ICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworCisgICAgICAgICAgICAgICAgLy8gY2xp
Y2sgdGhlIG1haW4gZnJhbWUgaW5wdXQgZmllbGQuCisgICAgICAgICAgICAgICAgZXZlbnRTZW5k
ZXIubW91c2VNb3ZlVG8obWFpbklucHV0Lm9mZnNldExlZnQgKyAxMCwgbWFpbklucHV0Lm9mZnNl
dFRvcCArIDUpOworICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAg
ICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKworICAgICAgICAgICAgICAgIC8v
IGNsaWNrIHRoZSBpZnJhbWUgaW5wdXQgZmllbGQgYWdhaW4uCisgICAgICAgICAgICAgICAgZXZl
bnRTZW5kZXIubW91c2VNb3ZlVG8oaWZybS5vZmZzZXRMZWZ0ICsgaWZyYW1lSW5wdXQub2Zmc2V0
TGVmdCArIDEwLCBpZnJtLm9mZnNldFRvcCArIGlmcmFtZUlucHV0Lm9mZnNldFRvcCArIDUpOwor
ICAgICAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgICAgICAgICAgICAg
IGV2ZW50U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIDwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgorICAgIDxkaXY+bWFpbiBm
cmFtZSBpbnB1dCBmaWVsZDogPGlucHV0IGlkPSJtYWluSW5wdXQiIHR5cGU9InRleHQiPgorICAg
IDwvZGl2PgorICAgIDxpZnJhbWUgaWQ9ImZyYW1lIiBzdHlsZT0id2lkdGg6IDQwMHB4OyBoZWln
aHQ6IDQwcHg7IiBzY3JvbGxpbmc9Im5vIgorICAgICAgICAgICAgc3JjPSJkYXRhOnRleHQvaHRt
bCwgPGJvZHk+aWZyYW1lIGlucHV0IGZpZWxkOiA8aW5wdXQgaWQ9J2lmcmFtZUlucHV0JyB0eXBl
PSd0ZXh0Jz48L2JvZHk+Ij4KKyAgICA8L2lmcmFtZT4KKworICAgIDxwPlRoaXMgcGFnZSB0ZXN0
cyB0aGF0IG9ubHkgb25lIGZpZWxkIGlzIGZvY3VzZWQgaWYgd2luZG93Lm9uYmx1ciBjYWxscyB3
aW5kb3cuZm9jdXMuCisgICAgPGJyPlRvIHRlc3QsIGNsaWNrIHRoZSBtYWluZnJhbWUgaW5wdXQg
ZmllbGQgYW5kIHRoZW4gY2xpY2sgb24gdGhlIGlucHV0IGZpZWxkIGluc2lkZSB0aGUgaWZyYW1l
LgorICAgIDxicj5UZXN0IHBhc3NlcyBpZiBvbmx5IG9uZSBvZiB0aGUgaW5wdXQgZmllbGQgZ2V0
cyBmb2N1c2VkIGF0IGEgdGltZS48L3A+CisgICAgPHByZSBpZD0ibG9nIj48L3ByZT4KKzwvYm9k
eT4KKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L2ZyYW1lLXdpbmRvdy1ibHVyLWNhbGxpbmctZm9jdXMuaHRtbApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2
bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>
<flag name="review"
          id="29289"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47545</attachid>
            <date>2010-01-27 09:41:49 -0800</date>
            <delta_ts>2010-01-28 17:33:24 -0800</delta_ts>
            <desc>More test cases added</desc>
            <filename>focus_controller.patch</filename>
            <type>text/plain</type>
            <size>15259</size>
            <attacher name="Victor Wang">victorw</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzg3MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDEtMjYgIFZpY3RvciBXYW5nICA8dmljdG9yd0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IHRoZSBpc3N1ZSB0aGF0IGJvdGggbWFpbiBmcm9tZSBhbmQgaWZyYW1lIGFyZQorICAgICAg
ICBmb2N1c2VkIGlmIHdpbmRvdy5vbmJsdXIgY2FsbHMgd2luZG93LmZvY3VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE2OTIKKworICAgICAgICBU
aGUgcHJvYmxlbSBpcyBjYXVzZWQgYnkgdGhlIGZvY3VzZWQgZnJhbWUgaW4gRm9jdXNDb250cm9s
bGVyCisgICAgICAgIGlzIG1lc3NlZCB1cCBpZiB3aW5kb3cub25ibHVyIGNhbGxzIHdpbmRvdy5m
b2N1czoKKyAgICAgICAgV2hlbiB1c2VyIGNsaWNrcyBpZnJhbWUgdG8gc3dpdGNoIGZvY3VzIGZy
b20gbWFpbiBmcmFtZSB0byBpZnJhbWUsCisgICAgICAgIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9j
dXNlZEZyYW1lIGZpcmVzIG9uYmx1ciBldmVudCwgd2hpY2ggY2FsbHMKKyAgICAgICAgd2luZG93
LmZvY3VzIGFuZCB0aGVuIGNhbGxzIHNldEZvY3VzZWRGcmFtZSBhZ2FpbiB0byBzd2l0Y2ggYmFj
ay4KKyAgICAgICAgVGhpcyBtZXNzZXMgdXAgdGhlIG9sZCBmb2N1c2VkIGZyYW1lIGFuZCBuZXcg
Zm9jdXNlZCBmcmFtZSBhbmQKKyAgICAgICAgbGVhdmVzIHRoZSBGb2N1c0NvbnRyb2xsZXIgY29u
ZnVzZWQuIEFzIGEgcmVzdWx0LCBjb250cm9sbHMKKyAgICAgICAgaW4gYm90aCBtYWluIGZyYW1l
IGFuZCBpZnJhbWUgbG9vayBsaWtlIGdldCBmb2N1c2VkLgorCisgICAgICAgIFRvIGZpeCBpdCwg
YWRkIGEgZmxhZyB0byBGb2N1c0NvbnRyb2xsZXIgYW5kIGRvIG5vIHN3aXRjaCB0aGUgZm9jdXNl
ZAorICAgICAgICBmcmFtZSB3aGVuIEZvY3VzQ29udHJvbGxlciBpcyBpbiB0aGUgbWlkZGxlIG9m
IGNoYW5naW5nIHRoZSBmb2N1c2VkIGZyYW1lLiAKKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50
cy9jaGFuZ2UtZnJhbWUtZm9jdXMuaHRtbAorCisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpGb2N1c0NvbnRyb2xs
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkRnJhbWUp
OgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpG
b2N1c0NvbnRyb2xsZXI6OmZvY3VzZWRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0Nv
bnRyb2xsZXI6OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6
aXNGb2N1c2VkKToKKwogMjAxMC0wMS0yNiAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Gb2N1
c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA1MzgyNSkKKysrIFdlYkNvcmUvcGFnZS9Gb2N1c0Nv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCw4IEBACiAjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTcy
LDE0ICs3MiwxNyBAQCBGb2N1c0NvbnRyb2xsZXI6OkZvY3VzQ29udHJvbGxlcihQYWdlKiBwCiAg
ICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1faXNBY3RpdmUoZmFsc2UpCiAgICAgLCBtX2lzRm9j
dXNlZChmYWxzZSkKKyAgICAsIG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZShmYWxzZSkKIHsKIH0K
IAogdm9pZCBGb2N1c0NvbnRyb2xsZXI6OnNldEZvY3VzZWRGcmFtZShQYXNzUmVmUHRyPEZyYW1l
PiBmcmFtZSkKIHsKLSAgICBpZiAobV9mb2N1c2VkRnJhbWUgPT0gZnJhbWUpCisgICAgaWYgKG1f
Zm9jdXNlZEZyYW1lID09IGZyYW1lIHx8IG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgbV9pc0NoYW5naW5nRm9jdXNlZEZyYW1lID0gdHJ1ZTsKKwogICAg
IFJlZlB0cjxGcmFtZT4gb2xkRnJhbWUgPSBtX2ZvY3VzZWRGcmFtZTsKICAgICBSZWZQdHI8RnJh
bWU+IG5ld0ZyYW1lID0gZnJhbWU7CiAKQEAgLTk1LDYgKzk4LDggQEAgdm9pZCBGb2N1c0NvbnRy
b2xsZXI6OnNldEZvY3VzZWRGcmFtZShQYQogICAgICAgICBuZXdGcmFtZS0+c2VsZWN0aW9uKCkt
PnNldEZvY3VzZWQodHJ1ZSk7CiAgICAgICAgIG5ld0ZyYW1lLT5kb2N1bWVudCgpLT5kaXNwYXRj
aFdpbmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmZvY3VzRXZlbnQsIGZhbHNl
LCBmYWxzZSkpOwogICAgIH0KKworICAgIG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZSA9IGZhbHNl
OwogfQogCiBGcmFtZSogRm9jdXNDb250cm9sbGVyOjpmb2N1c2VkT3JNYWluRnJhbWUoKQpJbmRl
eDogV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuaAkocmV2aXNpb24gNTM4MjUpCisrKyBXZWJDb3JlL3BhZ2Uv
Rm9jdXNDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDM2ICszMywzNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBLZXlib2Fy
ZEV2ZW50OwotICAgIGNsYXNzIE5vZGU7Ci0gICAgY2xhc3MgUGFnZTsKLQotICAgIGNsYXNzIEZv
Y3VzQ29udHJvbGxlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Ci0gICAgcHVibGljOgotICAgICAg
ICBGb2N1c0NvbnRyb2xsZXIoUGFnZSopOwotCi0gICAgICAgIHZvaWQgc2V0Rm9jdXNlZEZyYW1l
KFBhc3NSZWZQdHI8RnJhbWU+KTsKLSAgICAgICAgRnJhbWUqIGZvY3VzZWRGcmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9jdXNlZEZyYW1lLmdldCgpOyB9Ci0gICAgICAgIEZyYW1lKiBmb2N1c2Vk
T3JNYWluRnJhbWUoKTsKK2NsYXNzIEZyYW1lOworY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNz
IE5vZGU7CitjbGFzcyBQYWdlOworCitjbGFzcyBGb2N1c0NvbnRyb2xsZXIgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworcHVibGljOgorICAgIEZvY3VzQ29udHJvbGxlcihQYWdlKik7CisKKyAgICB2
b2lkIHNldEZvY3VzZWRGcmFtZShQYXNzUmVmUHRyPEZyYW1lPik7CisgICAgRnJhbWUqIGZvY3Vz
ZWRGcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9jdXNlZEZyYW1lLmdldCgpOyB9CisgICAgRnJh
bWUqIGZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgICAgIGJvb2wgc2V0SW5pdGlhbEZvY3Vz
KEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50Kik7Ci0gICAgICAgIGJvb2wgYWR2YW5jZUZv
Y3VzKEZvY3VzRGlyZWN0aW9uLCBLZXlib2FyZEV2ZW50KiwgYm9vbCBpbml0aWFsRm9jdXMgPSBm
YWxzZSk7CisgICAgYm9vbCBzZXRJbml0aWFsRm9jdXMoRm9jdXNEaXJlY3Rpb24sIEtleWJvYXJk
RXZlbnQqKTsKKyAgICBib29sIGFkdmFuY2VGb2N1cyhGb2N1c0RpcmVjdGlvbiwgS2V5Ym9hcmRF
dmVudCosIGJvb2wgaW5pdGlhbEZvY3VzID0gZmFsc2UpOwogICAgICAgICAKLSAgICAgICAgYm9v
bCBzZXRGb2N1c2VkTm9kZShOb2RlKiwgUGFzc1JlZlB0cjxGcmFtZT4pOworICAgIGJvb2wgc2V0
Rm9jdXNlZE5vZGUoTm9kZSosIFBhc3NSZWZQdHI8RnJhbWU+KTsKIAotICAgICAgICB2b2lkIHNl
dEFjdGl2ZShib29sKTsKLSAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNBY3RpdmU7IH0KKyAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKKyAgICBib29sIGlzQWN0aXZl
KCkgY29uc3QgeyByZXR1cm4gbV9pc0FjdGl2ZTsgfQogCi0gICAgICAgIHZvaWQgc2V0Rm9jdXNl
ZChib29sKTsKLSAgICAgICAgYm9vbCBpc0ZvY3VzZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRm9j
dXNlZDsgfQorICAgIHZvaWQgc2V0Rm9jdXNlZChib29sKTsKKyAgICBib29sIGlzRm9jdXNlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNGb2N1c2VkOyB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBQ
YWdlKiBtX3BhZ2U7Ci0gICAgICAgIFJlZlB0cjxGcmFtZT4gbV9mb2N1c2VkRnJhbWU7Ci0gICAg
ICAgIGJvb2wgbV9pc0FjdGl2ZTsKLSAgICAgICAgYm9vbCBtX2lzRm9jdXNlZDsKLSAgICB9Owor
cHJpdmF0ZToKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgUmVmUHRyPEZyYW1lPiBtX2ZvY3VzZWRG
cmFtZTsKKyAgICBib29sIG1faXNBY3RpdmU7CisgICAgYm9vbCBtX2lzRm9jdXNlZDsKKyAgICBi
b29sIG1faXNDaGFuZ2luZ0ZvY3VzZWRGcmFtZTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUzODcxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDEtMjYgIFZpY3RvciBX
YW5nICA8dmljdG9yd0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRml4IHRoZSBpc3N1ZSB0aGF0IGJvdGggbWFpbiBmcm9tZSBh
bmQgaWZyYW1lIGFyZQorICAgICAgICBmb2N1c2VkIGlmIHdpbmRvdy5vbmJsdXIgY2FsbHMgd2lu
ZG93LmZvY3VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzE2OTIKKworICAgICAgICBUaGUgcHJvYmxlbSBpcyBjYXVzZWQgYnkgdGhlIGZvY3VzZWQg
ZnJhbWUgaW4gRm9jdXNDb250cm9sbGVyCisgICAgICAgIGlzIG1lc3NlZCB1cCBpZiB3aW5kb3cu
b25ibHVyIGNhbGxzIHdpbmRvdy5mb2N1czoKKyAgICAgICAgV2hlbiB1c2VyIGNsaWNrcyBpZnJh
bWUgdG8gc3dpdGNoIGZvY3VzIGZyb20gbWFpbiBmcmFtZSB0byBpZnJhbWUsCisgICAgICAgIEZv
Y3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEZyYW1lIGZpcmVzIG9uYmx1ciBldmVudCwgd2hpY2gg
Y2FsbHMKKyAgICAgICAgd2luZG93LmZvY3VzIGFuZCB0aGVuIGNhbGxzIHNldEZvY3VzZWRGcmFt
ZSBhZ2FpbiB0byBzd2l0Y2ggYmFjay4KKyAgICAgICAgVGhpcyBtZXNzZXMgdXAgdGhlIG9sZCBm
b2N1c2VkIGZyYW1lIGFuZCBuZXcgZm9jdXNlZCBmcmFtZSBhbmQKKyAgICAgICAgbGVhdmVzIHRo
ZSBGb2N1c0NvbnRyb2xsZXIgY29uZnVzZWQuIEFzIGEgcmVzdWx0LCBjb250cm9sbHMKKyAgICAg
ICAgaW4gYm90aCBtYWluIGZyYW1lIGFuZCBpZnJhbWUgbG9vayBsaWtlIGdldCBmb2N1c2VkLgor
CisgICAgICAgIFRvIGZpeCBpdCwgYWRkIGEgZmxhZyB0byBGb2N1c0NvbnRyb2xsZXIgYW5kIGRv
IG5vIHN3aXRjaCB0aGUgZm9jdXNlZAorICAgICAgICBmcmFtZSB3aGVuIEZvY3VzQ29udHJvbGxl
ciBpcyBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIHRoZSBmb2N1c2VkIGZyYW1lLiAKKworICAg
ICAgICAqIGZhc3QvZXZlbnRzL2NoYW5nZS1mcmFtZS1mb2N1cy1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvZXZlbnRzL2NoYW5nZS1mcmFtZS1mb2N1cy5odG1sOiBBZGRlZC4K
KwogMjAxMC0wMS0yNiAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2NoYW5nZS1mcmFtZS1mb2N1cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9ldmVudHMvY2hhbmdlLWZyYW1lLWZvY3VzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2NoYW5nZS1mcmFtZS1mb2N1cy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKyAgCitUZXN0IHRoZSBmb2N1
cyBjb250cm9sbGVyIHdvcmtpbmcgcHJvcGVybHkgd2hlbiBzd2l0Y2hpbmcgZm9jdXNlZCBmcmFt
ZS4gSGVyZSBhcmUgdGhlIGNhc2VzIHRlc3RlZDogCisKKy0uIENvcnJlY3QgZnJhbWUgaXMgZm9j
dXNlZCB3aGVuIHN3aXRjaGluZyBmb2N1cyBmcm9tIG9uZSBmcmFtZSB0byBhbm90aGVyOiAKKzEu
IG1haW4gZnJhbWUgLT4gaWZyYW1lIAorMi4gaWZyYW1lIHRvIG1haW4gZnJhbWUgCiszLiBpZnJh
bWUgMSB0byBpZnJhbWUgMiAKKworLS4gTmV3IHNldHRpbmcgZm9jdXMgcmVxdWVzdCB3aWxsIGJl
IGlnbm9yZWQgaWYgdGhlIGZvY3VzIGNvbnRyb2xsZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBzd2l0
Y2hpbmcgZm9jdXNlZCBmcmFtZSAob25ibHVyLCBvbmZvY3VzIGV2ZW50cyk6IAorMS4gaWZyYW1l
IDEgb25ibHVyIHNldHMgaWZyYW1lIDIgZm9jdXMuIAorMi4gaWZyYW1lIDEgb25ibHVyIHNldHMg
aWZyYW1lIDEgZm9jdXMuIAorMy4gaWZyYW1lIDEgb25mb2N1cyBzZXRzIGlmcmFtZSAyIGZvY3Vz
LiAKKzQuIGlmcmFtZSAxIG9uZm9jdXMgc2V0cyBpZnJhbWUgMSBmb2N1cy4KKworCitUZXN0OiBt
YWluIGZyYW1lIHRvIGlmcmFtZS4KK21haW4gZnJhbWUgYmx1cnJlZC4KK2lmcmFtZTEgZm9jdXNl
ZC4KKworVGVzdDogaWZyYW1lIHRvIG1haW4gZnJhbWUuCitpZnJhbWUxIGJsdXJyZWQuCittYWlu
IGZyYW1lIGZvY3VzZWQuCisKK1Rlc3Q6IGlmcmFtZTEgdG8gaWZyYW1lMi4KK21haW4gZnJhbWUg
Ymx1cnJlZC4KK2lmcmFtZTEgZm9jdXNlZC4KK2lmcmFtZTEgYmx1cnJlZC4KK2lmcmFtZTIgZm9j
dXNlZC4KK2lmcmFtZTIgYmx1cnJlZC4KK2lmcmFtZTEgZm9jdXNlZC4KKworVGVzdDogaWZyYW1l
MSBvbmJsdXIgc2V0cyBpZnJhbWUyIGZvY3VzLgoraWZyYW1lMSBibHVycmVkLgorbWFpbiBmcmFt
ZSBmb2N1c2VkLgorbWFpbiBmcmFtZSBibHVycmVkLgoraWZyYW1lMSBmb2N1c2VkLgoraWZyYW1l
MSBibHVycmVkLgorbWFpbiBmcmFtZSBmb2N1c2VkLgorCitUZXN0OiBpZnJhbWUxIG9uYmx1ciBz
ZXRzIGlmcmFtZTEgZm9jdXMuCittYWluIGZyYW1lIGJsdXJyZWQuCitpZnJhbWUxIGZvY3VzZWQu
CitpZnJhbWUxIGJsdXJyZWQuCittYWluIGZyYW1lIGZvY3VzZWQuCisKK1Rlc3Q6IGlmcmFtZTEg
b25mb2N1cyBzZXRzIGlmcmFtZTIgZm9jdXMuCittYWluIGZyYW1lIGJsdXJyZWQuCitpZnJhbWUx
IGZvY3VzZWQuCisKK1Rlc3Q6IGlmcmFtZTEgb25mb2N1cyBzZXRzIGlmcmFtZTEgZm9jdXMuCitp
ZnJhbWUxIGJsdXJyZWQuCittYWluIGZyYW1lIGZvY3VzZWQuCittYWluIGZyYW1lIGJsdXJyZWQu
CitpZnJhbWUxIGZvY3VzZWQuCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvZXZlbnRzL2NoYW5nZS1mcmFtZS1mb2N1cy1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvY2hhbmdlLWZyYW1lLWZvY3VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9ldmVudHMvY2hhbmdlLWZyYW1lLWZvY3VzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9jaGFuZ2UtZnJhbWUtZm9jdXMuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMDEgQEAKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVu
Y3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImxvZyIpLmFwcGVuZENoaWxkKAorICAgICAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1zZyArICJcbiIpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVu
Y3Rpb24gc2V0RnJhbWVIYW5kbGVyKGZyYW1lSWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChmcmFtZUlkID09ICIiKSB7CisgICAgICAgICAgICAgICAgd2luZG93Lm9uZm9jdXMgPSBmdW5j
dGlvbigpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb2coIm1haW4g
ZnJhbWUgZm9jdXNlZC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB3aW5kb3cub25ibHVyID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbG9nKCJtYWluIGZyYW1lIGJsdXJyZWQuIik7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgZnJh
bWVXaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcmFtZUlkKS5jb250ZW50V2luZG93Owor
ICAgICAgICAgICAgICAgIGZyYW1lV2luLm9uZm9jdXMgPSBmdW5jdGlvbigpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb2coZnJhbWVJZCArICIgZm9jdXNlZC4iKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmcmFtZVdpbi5vbmJsdXIgPSBm
dW5jdGlvbigpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsb2coZnJh
bWVJZCArICIgYmx1cnJlZC4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzZXRGcmFtZUZvY3VzKGZyYW1lSWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChmcmFtZUlkID09ICIiKSB7CisgICAgICAgICAgICAgICAg
d2luZG93LmZvY3VzKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZh
ciBmcmFtZVdpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZyYW1lSWQpLmNvbnRlbnRXaW5k
b3c7CisgICAgICAgICAgICAgICAgZnJhbWVXaW4uZm9jdXMoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RNYWluRnJhbWVUb0lGcmFtZUZvY3VzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgbG9nKCJcblRlc3Q6IG1haW4gZnJhbWUgdG8gaWZyYW1l
LiIpOworICAgICAgICAgICAgc2V0RnJhbWVGb2N1cygiIik7CisgICAgICAgICAgICBzZXRGcmFt
ZUZvY3VzKCJpZnJhbWUxIik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0SUZy
YW1lVG9NYWluRnJhbWVGb2N1cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvZygiXG5UZXN0
OiBpZnJhbWUgdG8gbWFpbiBmcmFtZS4iKTsKKyAgICAgICAgICAgIHNldEZyYW1lRm9jdXMoImlm
cmFtZTEiKTsKKyAgICAgICAgICAgIHNldEZyYW1lRm9jdXMoIiIpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gdGVzdElGcmFtZVRvSUZyYW1lRm9jdXMoKQorICAgICAgICB7CisgICAg
ICAgICAgICBsb2coIlxuVGVzdDogaWZyYW1lMSB0byBpZnJhbWUyLiIpOworICAgICAgICAgICAg
c2V0RnJhbWVGb2N1cygiaWZyYW1lMSIpOworICAgICAgICAgICAgc2V0RnJhbWVGb2N1cygiaWZy
YW1lMiIpOworICAgICAgICAgICAgc2V0RnJhbWVGb2N1cygiaWZyYW1lMSIpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEZyYW1lMU9uQmx1clNldEZyYW1lMkZvY3VzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIGZyYW1lV2luMSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJpZnJhbWUxIikuY29udGVudFdpbmRvdzsKKyAgICAgICAgICAgIGZyYW1lV2luMS5vbmZv
Y3VzID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvZygiaWZy
YW1lMSBmb2N1c2VkLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcmFtZVdpbjEu
b25ibHVyID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvZygi
aWZyYW1lMSBibHVycmVkLiIpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgc2V0IGZvY3VzIHJl
cXVlc3Qgd2lsbCBiZSBpZ25vcmVkIGJlY2F1c2UgdGhlIEZvY3VzQ29udHJvbGxlcgorICAgICAg
ICAgICAgICAgIC8vIGlzIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgZm9jdXNlZCBmcmFtZS4K
KyAgICAgICAgICAgICAgICBzZXRGcmFtZUZvY3VzKCJpZnJhbWUyIik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGxvZygiXG5UZXN0OiBpZnJhbWUxIG9uYmx1ciBzZXRzIGlmcmFtZTIg
Zm9jdXMuIik7CisgICAgICAgICAgICBzZXRGcmFtZUZvY3VzKCIiKTsKKyAgICAgICAgICAgIHNl
dEZyYW1lRm9jdXMoImlmcmFtZTEiKTsKKyAgICAgICAgICAgIHNldEZyYW1lRm9jdXMoIiIpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEZyYW1lMU9uQmx1clNldEZyYW1lMUZv
Y3VzKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGZyYW1lV2luMSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJpZnJhbWUxIikuY29udGVudFdpbmRvdzsKKyAgICAgICAgICAgIGZyYW1l
V2luMS5vbmZvY3VzID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGxvZygiaWZyYW1lMSBmb2N1c2VkLiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
cmFtZVdpbjEub25ibHVyID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGxvZygiaWZyYW1lMSBibHVycmVkLiIpOworICAgICAgICAgICAgICAgIC8vIFRoaXMgc2V0
IGZvY3VzIHJlcXVlc3Qgd2lsbCBiZSBpZ25vcmVkIGJlY2F1c2UgdGhlIEZvY3VzQ29udHJvbGxl
cgorICAgICAgICAgICAgICAgIC8vIGlzIGluIHRoZSBtaWRkbGUgb2YgY2hhbmdpbmcgZm9jdXNl
ZCBmcmFtZS4KKyAgICAgICAgICAgICAgICBzZXRGcmFtZUZvY3VzKCJpZnJhbWUxIik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygiXG5UZXN0OiBpZnJhbWUxIG9uYmx1ciBzZXRz
IGlmcmFtZTEgZm9jdXMuIik7CisgICAgICAgICAgICBzZXRGcmFtZUZvY3VzKCIiKTsKKyAgICAg
ICAgICAgIHNldEZyYW1lRm9jdXMoImlmcmFtZTEiKTsKKyAgICAgICAgICAgIHNldEZyYW1lRm9j
dXMoIiIpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEZyYW1lMU9uRm9jdXNT
ZXRGcmFtZTJGb2N1cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBmcmFtZVdpbjEgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaWZyYW1lMSIpLmNvbnRlbnRXaW5kb3c7CisgICAgICAg
ICAgICBmcmFtZVdpbjEub25mb2N1cyA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBsb2coImlmcmFtZTEgZm9jdXNlZC4iKTsKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIHNldCBmb2N1cyByZXF1ZXN0IHdpbGwgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBGb2N1c0Nv
bnRyb2xsZXIKKyAgICAgICAgICAgICAgICAvLyBpcyBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5n
IGZvY3VzZWQgZnJhbWUuCisgICAgICAgICAgICAgICAgc2V0RnJhbWVGb2N1cygiaWZyYW1lMiIp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcmFtZVdpbjEub25ibHVyID0gZnVuY3Rp
b24oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxvZygiaWZyYW1lMSBibHVycmVk
LiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coIlxuVGVzdDogaWZyYW1lMSBv
bmZvY3VzIHNldHMgaWZyYW1lMiBmb2N1cy4iKTsKKyAgICAgICAgICAgIHNldEZyYW1lRm9jdXMo
IiIpOworICAgICAgICAgICAgc2V0RnJhbWVGb2N1cygiaWZyYW1lMSIpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdEZyYW1lMU9uRm9jdXNTZXRGcmFtZTFGb2N1cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZhciBmcmFtZVdpbjEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaWZyYW1lMSIpLmNvbnRlbnRXaW5kb3c7CisgICAgICAgICAgICBmcmFtZVdpbjEub25mb2N1
cyA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsb2coImlmcmFt
ZTEgZm9jdXNlZC4iKTsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHNldCBmb2N1cyByZXF1ZXN0
IHdpbGwgYmUgaWdub3JlZCBiZWNhdXNlIHRoZSBGb2N1c0NvbnRyb2xsZXIKKyAgICAgICAgICAg
ICAgICAvLyBpcyBpbiB0aGUgbWlkZGxlIG9mIGNoYW5naW5nIGZvY3VzZWQgZnJhbWUuCisgICAg
ICAgICAgICAgICAgc2V0RnJhbWVGb2N1cygiaWZyYW1lMSIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmcmFtZVdpbjEub25ibHVyID0gZnVuY3Rpb24oKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGxvZygiaWZyYW1lMSBibHVycmVkLiIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBsb2coIlxuVGVzdDogaWZyYW1lMSBvbmZvY3VzIHNldHMgaWZyYW1lMSBm
b2N1cy4iKTsKKyAgICAgICAgICAgIHNldEZyYW1lRm9jdXMoIiIpOworICAgICAgICAgICAgc2V0
RnJhbWVGb2N1cygiaWZyYW1lMSIpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVz
dCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldEZyYW1lSGFuZGxlcigiIik7CisgICAg
ICAgICAgICBzZXRGcmFtZUhhbmRsZXIoImlmcmFtZTEiKTsKKyAgICAgICAgICAgIHNldEZyYW1l
SGFuZGxlcigiaWZyYW1lMiIpOworCisgICAgICAgICAgICAvLyBUZXN0IHRoZSBjb3JyZWN0IGZy
YW1lIGlzIGZvY3VzZWQgd2hlbiBzd2l0Y2hpbmcgZm9jdXMgZnJvbQorICAgICAgICAgICAgLy8g
b25lIGZyYW1lIHRvIGFub3RoZXIuCisgICAgICAgICAgICB0ZXN0TWFpbkZyYW1lVG9JRnJhbWVG
b2N1cygpOworICAgICAgICAgICAgdGVzdElGcmFtZVRvTWFpbkZyYW1lRm9jdXMoKTsKKyAgICAg
ICAgICAgIHRlc3RJRnJhbWVUb0lGcmFtZUZvY3VzKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIE5ldyBzZXR0aW5nIGZvY3VzIHJlcXVlc3Qgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZSBm
b2N1cyBjb250cm9sbGVyCisgICAgICAgICAgICAvLyBpcyBpbiB0aGUgbWlkZGxlIG9mIHN3aXRj
aGluZyBmb2N1c2VkIGZyYW1lIChvbmJsdXIsIG9uZm9jdXMgZXZlbnRzKS4KKyAgICAgICAgICAg
IHRlc3RGcmFtZTFPbkJsdXJTZXRGcmFtZTJGb2N1cygpOworICAgICAgICAgICAgdGVzdEZyYW1l
MU9uQmx1clNldEZyYW1lMUZvY3VzKCk7CisgICAgICAgICAgICB0ZXN0RnJhbWUxT25Gb2N1c1Nl
dEZyYW1lMkZvY3VzKCk7CisgICAgICAgICAgICB0ZXN0RnJhbWUxT25Gb2N1c1NldEZyYW1lMUZv
Y3VzKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgaWZyYW1lMSBvbmZv
Y3VzIGFuZCBvbmJsdXIgaGFuZGxlcnMuCisgICAgICAgICAgICBzZXRGcmFtZUhhbmRsZXIoImlm
cmFtZTEiKTsKKyAgICAgICAgfQorCisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InRlc3QoKSI+CisgICAgPGlmcmFtZSBpZD0iaWZyYW1lMSIgc3R5bGU9IndpZHRoOiAxMDBw
eDsgaGVpZ2h0OiAxMDBweDsiPjwvaWZyYW1lPgorICAgIDxpZnJhbWUgaWQ9ImlmcmFtZTIiIHN0
eWxlPSJ3aWR0aDogMTAwcHg7IGhlaWdodDogMTAwcHg7Ij48L2lmcmFtZT4KKyAgICA8cD5UZXN0
IHRoZSBmb2N1cyBjb250cm9sbGVyIHdvcmtpbmcgcHJvcGVybHkgd2hlbiBzd2l0Y2hpbmcgZm9j
dXNlZCBmcmFtZS4gSGVyZSBhcmUgdGhlIGNhc2VzIHRlc3RlZDoKKyAgICA8YnI+CisgICAgPGJy
Pi0uIENvcnJlY3QgZnJhbWUgaXMgZm9jdXNlZCB3aGVuIHN3aXRjaGluZyBmb2N1cyBmcm9tIG9u
ZSBmcmFtZSB0byBhbm90aGVyOgorICAgIDxicj4xLiBtYWluIGZyYW1lIC0+IGlmcmFtZQorICAg
IDxicj4yLiBpZnJhbWUgdG8gbWFpbiBmcmFtZQorICAgIDxicj4zLiBpZnJhbWUgMSB0byBpZnJh
bWUgMgorICAgIDxicj4KKyAgICA8YnI+LS4gTmV3IHNldHRpbmcgZm9jdXMgcmVxdWVzdCB3aWxs
IGJlIGlnbm9yZWQgaWYgdGhlIGZvY3VzIGNvbnRyb2xsZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBz
d2l0Y2hpbmcgZm9jdXNlZCBmcmFtZSAob25ibHVyLCBvbmZvY3VzIGV2ZW50cyk6CisgICAgPGJy
PjEuIGlmcmFtZSAxIG9uYmx1ciBzZXRzIGlmcmFtZSAyIGZvY3VzLgorICAgIDxicj4yLiBpZnJh
bWUgMSBvbmJsdXIgc2V0cyBpZnJhbWUgMSBmb2N1cy4KKyAgICA8YnI+My4gaWZyYW1lIDEgb25m
b2N1cyBzZXRzIGlmcmFtZSAyIGZvY3VzLgorICAgIDxicj40LiBpZnJhbWUgMSBvbmZvY3VzIHNl
dHMgaWZyYW1lIDEgZm9jdXMuCisgICAgPC9wPgorICAgIDxwcmUgaWQ9ImxvZyI+PC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9jaGFuZ2UtZnJhbWUtZm9jdXMuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>
<flag name="review"
          id="30003"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>