<?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>149676</bug_id>
          
          <creation_ts>2015-09-30 13:00:28 -0700</creation_ts>
          <short_desc>Implement keyboard event sending for iOS in WebKitTestRunner</short_desc>
          <delta_ts>2015-10-01 07:29:08 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>iOS 9.0</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="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>enrica</cc>
    
    <cc>lforschler</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1129653</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 13:00:28 -0700</bug_when>
    <thetext>Get WKTR to be able to generate and send keyboard events on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129681</commentid>
    <comment_count>1</comment_count>
      <attachid>262195</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 15:19:45 -0700</bug_when>
    <thetext>Created attachment 262195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129684</commentid>
    <comment_count>2</comment_count>
      <attachid>262196</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 15:22:20 -0700</bug_when>
    <thetext>Created attachment 262196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129694</commentid>
    <comment_count>3</comment_count>
      <attachid>262196</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2015-09-30 15:46:51 -0700</bug_when>
    <thetext>Comment on attachment 262196
Patch

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

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.h:54
&gt; +- (void)keyDown:(NSString*)character completionBlock:(void (^)(void))completionBlock;

space before the star.

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:443
&gt; +    if ([key length] != 1)

dot?

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:481
&gt; +    if ([key length] == 1) {

dot.

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:495
&gt; +        case &apos;`&apos;:

Is there really nothing in the system that can do this for us (even if it&apos;s SPI?).

&gt; Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm:98
&gt; +    TestRunnerWKWebView* webView = TestController::singleton().mainWebView()-&gt;platformView();

star&apos;s on the wrong side

&gt; Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm:100
&gt; +    NSString* characterAsNSString = [[NSString stringWithCString:toSTD(toWK(character)).c_str()] autorelease];

I&apos;m sure there&apos;s a better way to get a NSString from a WKString. Going through std::string is crazy. At the very least, use WKStringGetUTF8CString instead of std::string::c_str(), no?

Also, star.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129700</commentid>
    <comment_count>4</comment_count>
      <attachid>262196</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 16:03:00 -0700</bug_when>
    <thetext>Comment on attachment 262196
Patch

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

Thanks for taking a look! I&apos;ll address the comments and get the bots to build (looks like I need to link against the HID usage tables). I&apos;ll have a new patch up soon.

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.h:54
&gt;&gt; +- (void)keyDown:(NSString*)character completionBlock:(void (^)(void))completionBlock;
&gt; 
&gt; space before the star.

Got it, I&apos;ll change this.

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:443
&gt;&gt; +    if ([key length] != 1)
&gt; 
&gt; dot?

Got it. I&apos;ll use dot for accessing properties from now on.

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:481
&gt;&gt; +    if ([key length] == 1) {
&gt; 
&gt; dot.

Will fix!

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:495
&gt;&gt; +        case &apos;`&apos;:
&gt; 
&gt; Is there really nothing in the system that can do this for us (even if it&apos;s SPI?).

I found nothing that could convert the non-alphanums (!@#$%, etc.) to their respective usage keys :(

&gt;&gt; Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm:98
&gt;&gt; +    TestRunnerWKWebView* webView = TestController::singleton().mainWebView()-&gt;platformView();
&gt; 
&gt; star&apos;s on the wrong side

Will fix!

&gt;&gt; Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm:100
&gt;&gt; +    NSString* characterAsNSString = [[NSString stringWithCString:toSTD(toWK(character)).c_str()] autorelease];
&gt; 
&gt; I&apos;m sure there&apos;s a better way to get a NSString from a WKString. Going through std::string is crazy. At the very least, use WKStringGetUTF8CString instead of std::string::c_str(), no?
&gt; 
&gt; Also, star.

I&apos;ll look for a cleaner way to do this.

Also, will fix the star.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129717</commentid>
    <comment_count>5</comment_count>
      <attachid>262196</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-09-30 16:28:01 -0700</bug_when>
    <thetext>Comment on attachment 262196
Patch

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

&gt; Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:38
&gt; +    void typeCharacter(DOMString character, object callback);

This should be named to make it clear whether it&apos;s a hardware keyboard event, or a software keyboard event.

&gt; Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:39
&gt; +

It may make sense to add callback properties for keyboard hide/show.

&gt; Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp:88
&gt; +#if PLATFORM(IOS)
&gt; +void UIScriptController::setDidShowKeyboardCallback(JSValueRef callback)
&gt; +{
&gt; +    m_didShowKeyboardCallback = m_context.registerCallback(callback);
&gt; +    platformSetDidShowKeyboardCallback();
&gt; +}
&gt; +
&gt; +JSValueRef UIScriptController::didShowKeyboardCallback() const
&gt; +{
&gt; +    return m_context.callbackWithID(m_didShowKeyboardCallback);
&gt; +}
&gt; +#endif

This should go in UIScriptControllerIOS.mm

&gt; Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp:103
&gt; +void typeCharacter(JSStringRef, JSValueRef)

UIScriptController::

&gt; Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h:62
&gt; +#if PLATFORM(IOS)
&gt; +    void setDidShowKeyboardCallback(JSValueRef);
&gt; +    JSValueRef didShowKeyboardCallback() const;
&gt; +#endif

I&apos;ve avoided #idfefs here, and just stubbed the functions out for non-iOS.

&gt; Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h:79
&gt; +#if PLATFORM(IOS)
&gt; +    void platformSetDidShowKeyboardCallback();
&gt; +#endif

Ditto.

&gt; Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:66
&gt; +        _keyboardMayAcceptKeyInput = NO;

The name of this property is confusing. Is it really _keyboardIsVisible?

&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:139
&gt; +    [self _sendHIDEvent:IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault,
&gt; +        timestamp,
&gt; +        kHIDPage_KeyboardOrKeypad,
&gt; +        usage,
&gt; +        isKeyDown,
&gt; +        kIOHIDEventOptionNone)];

You&apos;re leaking the event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129725</commentid>
    <comment_count>6</comment_count>
      <attachid>262196</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 16:37:52 -0700</bug_when>
    <thetext>Comment on attachment 262196
Patch

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

&gt;&gt; Tools/WebKitTestRunner/UIScriptContext/Bindings/UIScriptController.idl:38
&gt;&gt; +    void typeCharacter(DOMString character, object callback);
&gt; 
&gt; This should be named to make it clear whether it&apos;s a hardware keyboard event, or a software keyboard event.

Renaming to typeCharacterUsingHardwareKeyboard

&gt;&gt; Tools/WebKitTestRunner/UIScriptContext/UIScriptController.cpp:103
&gt;&gt; +void typeCharacter(JSStringRef, JSValueRef)
&gt; 
&gt; UIScriptController::

Fixed.

&gt;&gt; Tools/WebKitTestRunner/UIScriptContext/UIScriptController.h:62
&gt;&gt; +#endif
&gt; 
&gt; I&apos;ve avoided #idfefs here, and just stubbed the functions out for non-iOS.

Got it. I&apos;ll stub out the functions for non-iOS.

&gt;&gt; Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:66
&gt;&gt; +        _keyboardMayAcceptKeyInput = NO;
&gt; 
&gt; The name of this property is confusing. Is it really _keyboardIsVisible?

Yes, keyboardIsVisible would be a more accurate name. I&apos;ll change it to that.

&gt;&gt; Tools/WebKitTestRunner/ios/HIDEventGenerator.mm:139
&gt;&gt; +        kIOHIDEventOptionNone)];
&gt; 
&gt; You&apos;re leaking the event.

Good catch. Adding temp RetainPtr so the event is released after sending.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129825</commentid>
    <comment_count>7</comment_count>
      <attachid>262231</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 21:58:11 -0700</bug_when>
    <thetext>Created attachment 262231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129827</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-30 22:00:25 -0700</bug_when>
    <thetext>Attachment 262231 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:131:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:135:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:136:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:137:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:138:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:139:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:140:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:141:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:142:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:143:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:144:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:145:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:146:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:147:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:148:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:149:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:150:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:151:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:152:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:153:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:154:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:155:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:156:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:157:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:158:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:159:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:160:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:161:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:162:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:163:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:164:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:165:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:166:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:167:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:168:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:169:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:170:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:171:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:172:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 39 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129830</commentid>
    <comment_count>9</comment_count>
      <attachid>262232</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-09-30 22:12:09 -0700</bug_when>
    <thetext>Created attachment 262232
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129832</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-30 22:13:50 -0700</bug_when>
    <thetext>Attachment 262232 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:131:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:135:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:136:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:137:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:138:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:139:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:140:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:141:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:142:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:143:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:144:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:145:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:146:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:147:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:148:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:149:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:150:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:151:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:152:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:153:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:154:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:155:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:156:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:157:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:158:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:159:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:160:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:161:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:162:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:163:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:164:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:165:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:166:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:167:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:168:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:169:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:170:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:171:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Tools/WebKitTestRunner/ios/IOKitSPI.h:172:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 39 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129839</commentid>
    <comment_count>11</comment_count>
      <attachid>262232</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-09-30 22:57:44 -0700</bug_when>
    <thetext>Comment on attachment 262232
Patch

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

&gt; Tools/WebKitTestRunner/cocoa/TestRunnerWKWebView.mm:66
&gt; +        NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
&gt; +        [center addObserver:self selector:@selector(_keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
&gt; +        [center addObserver:self selector:@selector(_keyboardDidHide:) name:UIKeyboardDidHideNotification object:nil];

You need to call removeObserver in -dealloc.

&gt; Tools/WebKitTestRunner/ios/IOKitSPI.h:131
&gt; +    kHIDPage_KeyboardOrKeypad = 0x07

Move this up above kHIDPage_VendorDefinedStart.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129915</commentid>
    <comment_count>12</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-01 07:29:08 -0700</bug_when>
    <thetext>Committed r190407: &lt;http://trac.webkit.org/changeset/190407&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262195</attachid>
            <date>2015-09-30 15:19:45 -0700</date>
            <delta_ts>2015-09-30 15:22:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149676-20150930151920.patch</filename>
            <type>text/plain</type>
            <size>21361</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzRkNDcwZGE2Mjk0MjQwYjAyODJhMjg0NTkzOTBhNTQy
NTBjOWY5Mi4uNDMzMWJhOTI5MTY3M2JjZWQ3MTQ4NjFkZWEyZWI2NzZlMDk2MDVkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5
IEBACisyMDE1LTA5LTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBrZXlib2FyZCBldmVudCBzZW5kaW5nIGZvciBpT1MgaW4gV2Vi
S2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5Njc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIGFuZCBzZW5kaW5nIGtleSBldmVudHMg
aW4gV2ViS2l0VGVzdFJ1bm5lci4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgaW4gYSBzaW1pbGFyCisg
ICAgICAgIHdheSBhcyB0b3VjaCBldmVudHMsIHVzaW5nIElPSElERXZlbnQgbWFjaGluZXJ5LiBB
IHF1aXJrIGluIGdlbmVyYXRpbmcgdGhlc2UgZXZlbnRzIGlzIHRoYXQgdGhlIGtleWJvYXJkCisg
ICAgICAgIG11c3QgZmlyc3QgYmUgcmFpc2VkIGJlZm9yZSBrZXkgZXZlbnRzIGNhbiBiZSBoYW5k
bGVkLCBzbyB0aGUgc2VuZGluZyBvZiBrZXkgZXZlbnRzIGlzIGRlZmVycmVkIHVudGlsIHRoZQor
ICAgICAgICBrZXlib2FyZCBoYXMgYmVlbiByYWlzZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOiBB
ZGRzIHRoZSB0eXBlQ2hhcmFjdGVyIEpTIGludGVyZmFjZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKToKKyAg
ICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpkaWRTaG93S2V5Ym9hcmRDYWxsYmFjayk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtUZXN0UnVubmVyV0tXZWJWaWV3IGluaXRXaXRoRnJhbWU6
Y29uZmlndXJhdGlvbjpdKTogUmVnaXN0ZXJzIHRoZSBUZXN0UnVubmVyV0tXZWJWaWV3IHRvIGxp
c3RlbiB0bworICAgICAgICAgICAgICAgIHRoZSBub3RpZmljYXRpb25zIHRoYXQgdGhlIGtleWJv
YXJkIGhhcyBiZWVuIHJhaXNlZCBvciBsb3dlcmVkLgorICAgICAgICAoLVtUZXN0UnVubmVyV0tX
ZWJWaWV3IF9rZXlib2FyZERpZFNob3c6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXJXS1dlYlZp
ZXcgX2tleWJvYXJkRGlkSGlkZTpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lcldLV2ViVmlldyBj
YWxsV2hlbktleWJvYXJkSXNSZWFkeTpdKTogR2l2ZW4gYSBjYWxsYmFjaywgaW52b2tlcyB0aGUg
Y2FsbGJhY2sgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICBrZXlib2FyZCBpcyBwcmVwYXJlZCB0
byBhY2NlcHQgaW5wdXQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVy
YXRvci5tOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBfc2VuZElPSElES2V5Ym9hcmRF
dmVudDp1c2FnZTppc0tleURvd246XSk6IEhlbHBlciB0byBzZW5kIGEgSElEIGtleWJvYXJkIGV2
ZW50LgorICAgICAgICAoc2hvdWxkV3JhcFdpdGhTaGlmdEtleUV2ZW50Rm9yQ2hhcmFjdGVyKTog
SGVscGVyIHVzZWQgdG8gZ2VuZXJhdGUga2V5IGV2ZW50cy4KKyAgICAgICAgKGhpZFVzYWdlQ29k
ZUZvckNoYXJhY3Rlcik6IERpdHRvLgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBrZXlE
b3duOmNvbXBsZXRpb25CbG9jazpdKTogU3ludGhlc2l6ZXMgYW5kIHNlbmRzIEhJREtleWJvYXJk
RXZlbnRzLCB0cmlnZ2VyaW5nCisgICAgICAgICAgICAgICAgYSBrZXlEb3duIGV2ZW50IGluIFdl
YktpdC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6dHlwZUNoYXJhY3Rlcik6
IEltcGxlbWVudHMgdGhlIHR5cGVDaGFyYWN0ZXIgSlMgaW50ZXJmYWNlLgorICAgICAgICAoV1RS
OjpVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2sp
OgorCiAyMDE1LTA5LTI5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdIEFsbG93IHRlc3RzIHRvIGdlbmVyYXRlIHVzZXIgZ2VzdHVyZXMgZm9y
IFVJIHRlc3RpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRD
b250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmlu
ZGV4IGQwODA5MjMxMDE4YzE5YTU5NjMyZTk2MDMxNWU0ZTFjOGQ2ZmZlZjYuLjVhNGE2MTgzODQx
YzE5NDJjMDVjNjZjMDdiZmUwN2JmNzI1YTMzNzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlT
Y3JpcHRDb250cm9sbGVyLmlkbApAQCAtMzUsNiArMzUsOCBAQCBpbnRlcmZhY2UgVUlTY3JpcHRD
b250cm9sbGVyIHsKICAgICB2b2lkIHNpbmdsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIG9i
amVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBkb3VibGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5
LCBvYmplY3QgY2FsbGJhY2spOwogCisgICAgdm9pZCB0eXBlQ2hhcmFjdGVyKERPTVN0cmluZyBj
aGFyYWN0ZXIsIG9iamVjdCBjYWxsYmFjayk7CisKICAgICBhdHRyaWJ1dGUgb2JqZWN0IHdpbGxC
ZWdpblpvb21pbmdDYWxsYmFjazsKICAgICBhdHRyaWJ1dGUgb2JqZWN0IGRpZEVuZFpvb21pbmdD
YWxsYmFjazsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggYzYxYzI2ZTllYjE3YTE3
MTYwNmJhMTQ3OTRjZGU3MjI5YTZkMWVhOS4uYWQ4YzkzMjU3ZmQxYTNhNjE1ZDZlNTM1MmQxNWVk
YjE0ZGUxYzk4OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpbmNsdWRlICJKU1VJU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0
Q29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7CiAKQEAgLTc1LDYgKzc0LDE5IEBAIEpTVmFsdWVSZWYgVUlTY3JpcHRDb250
cm9sbGVyOjpkaWRFbmRab29taW5nQ2FsbGJhY2soKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRl
eHQuY2FsbGJhY2tXaXRoSUQobV9kaWRFbmRab29taW5nQ2FsbGJhY2spOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldERpZFNob3dLZXlib2FyZENh
bGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgbV9kaWRTaG93S2V5Ym9hcmRDYWxs
YmFjayA9IG1fY29udGV4dC5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICBwbGF0Zm9y
bVNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKCk7Cit9CisKK0pTVmFsdWVSZWYgVUlTY3JpcHRD
b250cm9sbGVyOjpkaWRTaG93S2V5Ym9hcmRDYWxsYmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29udGV4dC5jYWxsYmFja1dpdGhJRChtX2RpZFNob3dLZXlib2FyZENhbGxiYWNrKTsKK30K
KyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp6
b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYpCiB7CkBAIC04OCw2ICsxMDAsMTAgQEAgdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpT
VmFsdWVSZWYpCiB7CiB9CiAKK3ZvaWQgdHlwZUNoYXJhY3RlcihKU1N0cmluZ1JlZiwgSlNWYWx1
ZVJlZikKK3sKK30KKwogZG91YmxlIFVJU2NyaXB0Q29udHJvbGxlcjo6em9vbVNjYWxlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gMTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggMzAzZWRlYjZi
NzJlNjM1NTU1NWMwNDk5M2U1MDAyOGIzNmMzNzM5MS4uYmE1MGVjZmJhODE1ZTA1OGZhMjk4M2U5
ZWUyMzlmZmE0ZDk1YjNiYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTQ4LDEyICs0OCwx
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaW5nbGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBK
U1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBs
b25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIAorICAgIHZvaWQgdHlwZUNoYXJhY3Rl
cihKU1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYgY2FsbGJhY2spOworCiAgICAgdm9p
ZCBzZXRXaWxsQmVnaW5ab29taW5nQ2FsbGJhY2soSlNWYWx1ZVJlZik7CiAgICAgSlNWYWx1ZVJl
ZiB3aWxsQmVnaW5ab29taW5nQ2FsbGJhY2soKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RGlkRW5k
Wm9vbWluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpOwogICAgIEpTVmFsdWVSZWYgZGlkRW5kWm9vbWlu
Z0NhbGxiYWNrKCkgY29uc3Q7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBzZXREaWRT
aG93S2V5Ym9hcmRDYWxsYmFjayhKU1ZhbHVlUmVmKTsKKyAgICBKU1ZhbHVlUmVmIGRpZFNob3dL
ZXlib2FyZENhbGxiYWNrKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIGRvdWJsZSB6b29tU2NhbGUo
KSBjb25zdDsKICAgICBkb3VibGUgbWluaW11bVpvb21TY2FsZSgpIGNvbnN0OwogICAgIGRvdWJs
ZSBtYXhpbXVtWm9vbVNjYWxlKCkgY29uc3Q7CkBAIC02Nyw2ICs3NCw5IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBwbGF0Zm9ybVNldFdpbGxCZWdpblpvb21pbmdDYWxsYmFjaygpOwogICAg
IHZvaWQgcGxhdGZvcm1TZXREaWRFbmRab29taW5nQ2FsbGJhY2soKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCBwbGF0Zm9ybVNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKCk7CisjZW5k
aWYKIAogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBvdmVycmlkZTsKIApA
QCAtNzYsNiArODYsNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV93aWxsQmVnaW5ab29t
aW5nQ2FsbGJhY2sgeyAwIH07CiAgICAgdW5zaWduZWQgbV9kaWRFbmRab29taW5nQ2FsbGJhY2sg
eyAwIH07CisgICAgdW5zaWduZWQgbV9kaWRTaG93S2V5Ym9hcmRDYWxsYmFjayB7IDAgfTsKIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5l
cldLV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3LmgKaW5kZXggM2YxODU5MGEyMjNhMjNlOWU2ZmYxZjhiMDg0MDJlN2E4Yjc4NWZlMy4u
MWQ0NDY2OTNkYjZmNDVmZjA4MDhiNTJhZjY3ZjMyMzRkODljZTE4NiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKQEAgLTMzLDkg
KzMzLDEzIEBACiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChed2lsbEJlZ2lu
Wm9vbWluZ0NhbGxiYWNrKSh2b2lkKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lk
ICheZGlkRW5kWm9vbWluZ0NhbGxiYWNrKSh2b2lkKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSB2b2lkICheZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2spKHZvaWQpOworQHByb3BlcnR5IChu
b25hdG9taWMpIEJPT0wga2V5Ym9hcmRNYXlBY2NlcHRLZXlJbnB1dDsKIAotLSAodm9pZCl6b29t
VG9TY2FsZTooZG91YmxlKXNjYWxlIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29uZmlndXJhdGlvbjooV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpem9vbVRvU2NhbGU6KGRvdWJs
ZSlzY2FsZSBhbmltYXRlZDooQk9PTClhbmltYXRlZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWNhbGxXaGVuS2V5Ym9hcmRJc1Jl
YWR5Oih2b2lkICheKSh2b2lkKSljYWxsYmFjazsKICNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXgg
Y2M1MzBiMGQyOTk0YzFkZDZiOWQ2NzkwNzM0ODk4NDJmMGRlZmNmYi4uYjc5NTU0NmQwY2MwMzdk
NWM0YTUyNTZiNGMzZmE5N2QyNmYwYjM1YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQpAQCAtNTcsNiArNTcsMTcgQEAgLSAo
dm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZpZXdMb2NhdGlv
biBvZmZzZXQ6KE5TU2l6ZSlpbmkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb25maWd1cmF0aW9uOihXS1dl
YlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIGlmIChzZWxmID0gW3N1
cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWUgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSkgewor
ICAgICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciogY2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2Vs
ZWN0b3I6QHNlbGVjdG9yKF9rZXlib2FyZERpZFNob3c6KSBuYW1lOlVJS2V5Ym9hcmREaWRTaG93
Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9rZXlib2FyZERpZEhpZGU6KSBuYW1lOlVJS2V5Ym9hcmRE
aWRIaWRlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBfa2V5Ym9hcmRNYXlBY2Nl
cHRLZXlJbnB1dCA9IE5POworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKwogLSAodm9pZCl6
b29tVG9TY2FsZTooZG91YmxlKXNjYWxlIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIEFTU0VS
VCghc2VsZi56b29tVG9TY2FsZUNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTY1LDYgKzc2LDE4IEBA
IC0gKHZvaWQpem9vbVRvU2NhbGU6KGRvdWJsZSlzY2FsZSBhbmltYXRlZDooQk9PTClhbmltYXRl
ZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pCiAgICAgW3NlbGYuc2Nyb2xsVmlldyBzZXRab29tU2Nh
bGU6c2NhbGUgYW5pbWF0ZWQ6YW5pbWF0ZWRdOwogfQogCistICh2b2lkKV9rZXlib2FyZERpZFNo
b3c6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgX2tleWJvYXJkTWF5QWNj
ZXB0S2V5SW5wdXQgPSBZRVM7CisgICAgaWYgKHNlbGYuZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2sp
CisgICAgICAgIHNlbGYuZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2soKTsKK30KKworLSAodm9pZClf
a2V5Ym9hcmREaWRIaWRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9r
ZXlib2FyZE1heUFjY2VwdEtleUlucHV0ID0gTk87Cit9CisKIC0gKHZvaWQpc2Nyb2xsVmlld1dp
bGxCZWdpblpvb21pbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZpZXc6KG51bGxh
YmxlIFVJVmlldyAqKXZpZXcKIHsKICAgICBbc3VwZXIgc2Nyb2xsVmlld1dpbGxCZWdpblpvb21p
bmc6c2Nyb2xsVmlldyB3aXRoVmlldzp2aWV3XTsKQEAgLTg1LDYgKzEwOCwxNiBAQCAtICh2b2lk
KXNjcm9sbFZpZXdEaWRFbmRab29taW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhW
aWV3OihVSVZpZXcgKil2aQogICAgICAgICBzZWxmLnpvb21Ub1NjYWxlQ29tcGxldGlvbkhhbmRs
ZXIgPSBudWxscHRyOwogICAgIH0KIH0KKworLSAodm9pZCljYWxsV2hlbktleWJvYXJkSXNSZWFk
eToodm9pZCAoXikodm9pZCkpY2FsbGJhY2sKK3sKKyAgICBpZiAoc2VsZi5rZXlib2FyZE1heUFj
Y2VwdEtleUlucHV0KSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgLy8gV2UgZXhwZWN0IHRoZSBrZXlib2FyZCB0byBzaG93LCBzbyBqdXN0IHJlZ2lz
dGVyIHRoZSBjYWxsYmFjay4KKyAgICBzZWxmLmRpZFNob3dLZXlib2FyZENhbGxiYWNrID0gY2Fs
bGJhY2s7Cit9CiAjZW5kaWYKIAogQGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L0hJREV2ZW50R2VuZXJhdG9yLmgKaW5kZXggMjEyYjIxNjUxZDJiZjZjNzA0ZDg2OGM3N2ZjODIz
YWE2N2YzNGQxOS4uZWViNzQwYTI3MjIwOWEwODBkZDdkMDhhZDBjMjgzNTBhNmZlODBkOCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oCkBAIC01
MCw0ICs1MCw3IEBACiAKIC0gKHZvaWQpbWFya2VyRXZlbnRSZWNlaXZlZDooSU9ISURFdmVudFJl
ZilldmVudDsKIAorLy8gS2V5Ym9hcmQKKy0gKHZvaWQpa2V5RG93bjooTlNTdHJpbmcqKWNoYXJh
Y3RlciBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25CbG9jazsKKwog
QGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5l
cmF0b3IubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5t
bQppbmRleCAyZGRlNmE4NDAxZjY3MTgyMGEzYTlmMDdlN2FmNTg0YTI4OTY0YzhhLi43Mjk3NDQ5
ZDUxYjIzYTAwYzY2YWU1OWY3YTNlNmI1OTU1Nzg1YzJhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQpAQCAtMTI5LDYgKzEyOSwxNiBAQCAt
IChpbnN0YW5jZXR5cGUpaW5pdAogICAgIHJldHVybiBzZWxmOwogfQogCistICh2b2lkKV9zZW5k
SU9ISURLZXlib2FyZEV2ZW50Oih1aW50NjRfdCl0aW1lc3RhbXAgdXNhZ2U6KHVpbnQzMl90KXVz
YWdlIGlzS2V5RG93bjooYm9vbClpc0tleURvd24KK3sKKyAgICBbc2VsZiBfc2VuZEhJREV2ZW50
OklPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAg
ICAgIHRpbWVzdGFtcCwKKyAgICAgICAga0hJRFBhZ2VfS2V5Ym9hcmRPcktleXBhZCwKKyAgICAg
ICAgdXNhZ2UsCisgICAgICAgIGlzS2V5RG93biwKKyAgICAgICAga0lPSElERXZlbnRPcHRpb25O
b25lKV07Cit9CisKIC0gKElPSElERXZlbnRSZWYpX2NyZWF0ZUlPSElERXZlbnRUeXBlOihIYW5k
RXZlbnRUeXBlKWV2ZW50VHlwZQogewogICAgIEJPT0wgaXNUb3VjaGluZyA9IChldmVudFR5cGUg
PT0gSGFuZEV2ZW50VG91Y2hlZCB8fCBldmVudFR5cGUgPT0gSGFuZEV2ZW50TW92ZWQgfHwgZXZl
bnRUeXBlID09IEhhbmRFdmVudENob3JkQ2hhbmdlZCk7CkBAIC00MjgsNCArNDM4LDE3MSBAQCAt
ICh2b2lkKW1hcmtlckV2ZW50UmVjZWl2ZWQ6KElPSElERXZlbnRSZWYpZXZlbnQKICAgICB9CiB9
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRXcmFwV2l0aFNoaWZ0S2V5RXZlbnRGb3JDaGFy
YWN0ZXIoTlNTdHJpbmcqIGtleSkKK3sKKyAgICBpZiAoW2tleSBsZW5ndGhdICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQga2V5Q29kZSA9IFtrZXkgY2hhcmFjdGVyQXRJbmRl
eDowXTsKKyAgICBpZiAoNjUgPD0ga2V5Q29kZSAmJiBrZXlDb2RlIDw9IDkwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAgICBjYXNlICdgJzoKKyAgICBj
YXNlICchJzoKKyAgICBjYXNlICdAJzoKKyAgICBjYXNlICcjJzoKKyAgICBjYXNlICckJzoKKyAg
ICBjYXNlICclJzoKKyAgICBjYXNlICdeJzoKKyAgICBjYXNlICcmJzoKKyAgICBjYXNlICcqJzoK
KyAgICBjYXNlICcoJzoKKyAgICBjYXNlICcpJzoKKyAgICBjYXNlICdfJzoKKyAgICBjYXNlICcr
JzoKKyAgICBjYXNlICd7JzoKKyAgICBjYXNlICd9JzoKKyAgICBjYXNlICd8JzoKKyAgICBjYXNl
ICc6JzoKKyAgICBjYXNlICciJzoKKyAgICBjYXNlICc8JzoKKyAgICBjYXNlICc+JzoKKyAgICBj
YXNlICc/JzoKKyAgICBjYXNlICd+JzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBoaWRVc2FnZUNvZGVG
b3JDaGFyYWN0ZXIoTlNTdHJpbmcqIGtleSkKK3sKKyAgICBjb25zdCBpbnQgdXBwZXJjYXNlQWxw
aGFiZXRpY09mZnNldCA9ICdBJyAtIGtISURVc2FnZV9LZXlib2FyZEE7CisgICAgY29uc3QgaW50
IGxvd2VyY2FzZUFscGhhYmV0aWNPZmZzZXQgPSAnYScgLSBrSElEVXNhZ2VfS2V5Ym9hcmRBOwor
ICAgIGNvbnN0IGludCBudW1lcmljTm9uWmVyb09mZnNldCA9ICcxJyAtIGtISURVc2FnZV9LZXli
b2FyZDE7CisgICAgaWYgKFtrZXkgbGVuZ3RoXSA9PSAxKSB7CisgICAgICAgIC8vIEhhbmRsZSBh
bHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgYmFzaWMgc3ltYm9scy4KKyAgICAgICAgaW50IGtl
eUNvZGUgPSBba2V5IGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAgIGlmICg5NyA8PSBrZXlD
b2RlICYmIGtleUNvZGUgPD0gMTIyKSAvLyBIYW5kbGUgYS16LgorICAgICAgICAgICAgcmV0dXJu
IGtleUNvZGUgLSBsb3dlcmNhc2VBbHBoYWJldGljT2Zmc2V0OworCisgICAgICAgIGlmICg2NSA8
PSBrZXlDb2RlICYmIGtleUNvZGUgPD0gOTApIC8vIEhhbmRsZSBBLVouCisgICAgICAgICAgICBy
ZXR1cm4ga2V5Q29kZSAtIHVwcGVyY2FzZUFscGhhYmV0aWNPZmZzZXQ7CisKKyAgICAgICAgaWYg
KDQ5IDw9IGtleUNvZGUgJiYga2V5Q29kZSA8PSA1NykgLy8gSGFuZGxlIDEtOS4KKyAgICAgICAg
ICAgIHJldHVybiBrZXlDb2RlIC0gbnVtZXJpY05vblplcm9PZmZzZXQ7CisKKyAgICAgICAgLy8g
SGFuZGxlIGFsbCBvdGhlciBjYXNlcy4KKyAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAg
ICAgIGNhc2UgJ2AnOgorICAgICAgICBjYXNlICd+JzoKKyAgICAgICAgICAgIHJldHVybiBrSElE
VXNhZ2VfS2V5Ym9hcmRHcmF2ZUFjY2VudEFuZFRpbGRlOworICAgICAgICBjYXNlICchJzoKKyAg
ICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQxOworICAgICAgICBjYXNlICdAJzoK
KyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQyOworICAgICAgICBjYXNlICcj
JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQzOworICAgICAgICBjYXNl
ICckJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ0OworICAgICAgICBj
YXNlICclJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ1OworICAgICAg
ICBjYXNlICdeJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ2OworICAg
ICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ3Owor
ICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ4
OworICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9h
cmQ5OworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICBy
ZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkMDsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgIGNh
c2UgJ18nOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZEh5cGhlbjsKKyAg
ICAgICAgY2FzZSAnPSc6CisgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgcmV0dXJuIGtI
SURVc2FnZV9LZXlib2FyZEVxdWFsU2lnbjsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAg
ICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFRhYjsKKyAgICAgICAgY2FzZSAnWyc6CisgICAg
ICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZE9wZW5C
cmFja2V0OworICAgICAgICBjYXNlICddJzoKKyAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAg
ICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkQ2xvc2VCcmFja2V0OworICAgICAgICBjYXNlICdc
XCc6CisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXli
b2FyZEJhY2tzbGFzaDsKKyAgICAgICAgY2FzZSAnOyc6CisgICAgICAgIGNhc2UgJzonOgorICAg
ICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFNlbWljb2xvbjsKKyAgICAgICAgY2Fz
ZSAnXCcnOgorICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2Vf
S2V5Ym9hcmRRdW90ZTsKKyAgICAgICAgY2FzZSAnXHInOgorICAgICAgICBjYXNlICdcbic6Cisg
ICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUmV0dXJuT3JFbnRlcjsKKyAgICAg
ICAgY2FzZSAnLCc6CisgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgcmV0dXJuIGtISURV
c2FnZV9LZXlib2FyZENvbW1hOworICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgY2FzZSAnPic6
CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUGVyaW9kOworICAgICAgICBj
YXNlICcvJzoKKyAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdl
X0tleWJvYXJkU2xhc2g7CisgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgcmV0dXJuIGtI
SURVc2FnZV9LZXlib2FyZFNwYWNlYmFyOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IGlu
dCBmdW5jdGlvbktleU9mZnNldCA9IGtISURVc2FnZV9LZXlib2FyZEYxOworICAgIGZvciAoaW50
IGZ1bmN0aW9uS2V5SW5kZXggPSAxOyBmdW5jdGlvbktleUluZGV4IDw9IDEyOyArK2Z1bmN0aW9u
S2V5SW5kZXgpIHsKKyAgICAgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRiVkIiwgZnVuY3Rpb25LZXlJbmRleF1dKQorICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uS2V5T2Zmc2V0ICsgZnVuY3Rpb25LZXlJbmRleCAtIDE7CisgICAgfQor
ICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImVzY2FwZSJdKQorICAgICAgICByZXR1cm4g
a0hJRFVzYWdlX0tleWJvYXJkRXNjYXBlOworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpA
InJldHVybiJdIHx8IFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAiZW50ZXIiXSkKKyAgICAgICAgcmV0
dXJuIGtISURVc2FnZV9LZXlib2FyZFJldHVybk9yRW50ZXI7CisgICAgaWYgKFtrZXkgaXNFcXVh
bFRvU3RyaW5nOkAibGVmdEFycm93Il0pCisgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9h
cmRMZWZ0QXJyb3c7CisgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAicmlnaHRBcnJvdyJd
KQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUmlnaHRBcnJvdzsKKyAgICBpZiAo
W2tleSBpc0VxdWFsVG9TdHJpbmc6QCJ1cEFycm93Il0pCisgICAgICAgIHJldHVybiBrSElEVXNh
Z2VfS2V5Ym9hcmRVcEFycm93OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImRvd25B
cnJvdyJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkRG93bkFycm93OworICAg
IGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImRlbGV0ZSJdKQorICAgICAgICByZXR1cm4ga0hJ
RFVzYWdlX0tleWJvYXJkRGVsZXRlT3JCYWNrc3BhY2U7CisgICAgLy8gVGhlIHNpbXVsYXRvciBr
ZXlib2FyZCBpbnRlcnByZXRzIGJvdGggbGVmdCBhbmQgcmlnaHQgbW9kaWZpZXIga2V5cyB1c2lu
ZyB0aGUgbGVmdCB2ZXJzaW9uIG9mIHRoZSB1c2FnZSBjb2RlLgorICAgIGlmIChba2V5IGlzRXF1
YWxUb1N0cmluZzpAImxlZnRDb250cm9sIl0gfHwgW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJyaWdo
dENvbnRyb2wiXSkKKyAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZExlZnRDb250cm9s
OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRTaGlmdCJdIHx8IFtrZXkgaXNF
cXVhbFRvU3RyaW5nOkAicmlnaHRTaGlmdCJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tl
eWJvYXJkTGVmdFNoaWZ0OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRBbHQi
XSB8fCBba2V5IGlzRXF1YWxUb1N0cmluZzpAInJpZ2h0QWx0Il0pCisgICAgICAgIHJldHVybiBr
SElEVXNhZ2VfS2V5Ym9hcmRMZWZ0QWx0OworCisgICAgcmV0dXJuIDA7Cit9CisKKy0gKHZvaWQp
a2V5RG93bjooTlNTdHJpbmcqKWNoYXJhY3RlciBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKHZv
aWQpKWNvbXBsZXRpb25CbG9jaworeworICAgIGJvb2wgc2hvdWxkV3JhcFdpdGhTaGlmdCA9IHNo
b3VsZFdyYXBXaXRoU2hpZnRLZXlFdmVudEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIHVp
bnQzMl90IHVzYWdlID0gaGlkVXNhZ2VDb2RlRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAg
dWludDY0X3QgYWJzb2x1dGVNYWNoVGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOworCisgICAg
aWYgKHNob3VsZFdyYXBXaXRoU2hpZnQpCisgICAgICAgIFtzZWxmIF9zZW5kSU9ISURLZXlib2Fy
ZEV2ZW50OmFic29sdXRlTWFjaFRpbWUgdXNhZ2U6a0hJRFVzYWdlX0tleWJvYXJkTGVmdFNoaWZ0
IGlzS2V5RG93bjp0cnVlXTsKKworICAgIFdURkxvZ0Fsd2F5cygiICAgIFRoZSBjaGFyYWN0ZXIg
aXMgJXMiLCBbY2hhcmFjdGVyIFVURjhTdHJpbmddKTsKKyAgICBXVEZMb2dBbHdheXMoIiAgICBU
aGUgdXNhZ2UgY29kZSBpcyAlZCIsIHVzYWdlKTsKKyAgICBbc2VsZiBfc2VuZElPSElES2V5Ym9h
cmRFdmVudDphYnNvbHV0ZU1hY2hUaW1lIHVzYWdlOnVzYWdlIGlzS2V5RG93bjp0cnVlXTsKKyAg
ICBbc2VsZiBfc2VuZElPSElES2V5Ym9hcmRFdmVudDphYnNvbHV0ZU1hY2hUaW1lIHVzYWdlOnVz
YWdlIGlzS2V5RG93bjpmYWxzZV07CisKKyAgICBpZiAoc2hvdWxkV3JhcFdpdGhTaGlmdCkKKyAg
ICAgICAgW3NlbGYgX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6YWJzb2x1dGVNYWNoVGltZSB1c2Fn
ZTprSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0U2hpZnQgaXNLZXlEb3duOmZhbHNlXTsKKworICAgIFtz
ZWxmIF9zZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxldGlvbkJsb2NrOmNvbXBsZXRpb25CbG9j
a107Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJ
U2NyaXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbQppbmRleCA4YTg2NDg2MmI3NzhlYTNlNTU1ZmRkZjMyOGVlMzY1
YzA2ZjNjY2E4Li5kY2M5MDJjZDJiMjIxMDMxZGMzZTk2NmNhZjM2MzFkZmMwYjU0ODQ5IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1Mu
bW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9T
Lm1tCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkhJREV2ZW50R2VuZXJhdG9yLmgiCiAj
aW1wb3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbXBvcnQgIlN0cmluZ0Z1bmN0aW9ucy5oIgog
I2ltcG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcu
aCIKICNpbXBvcnQgIlVJU2NyaXB0Q29udGV4dC5oIgpAQCAtOTIsNiArOTMsMTkgQEAgdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXI6OmRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFs
dWVSZWYgY2FsbGJhY2spCiAgICAgfV07CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp0
eXBlQ2hhcmFjdGVyKEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBjYWxsYmFjaykK
K3sKKyAgICBUZXN0UnVubmVyV0tXZWJWaWV3KiB3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOworICAgIHVuc2lnbmVkIGNh
bGxiYWNrSUQgPSBtX2NvbnRleHQucHJlcGFyZUZvckFzeW5jVGFzayhjYWxsYmFjayk7CisgICAg
V1RGTG9nQWx3YXlzKCJXYWl0aW5nIGZvciB0aGUga2V5Ym9hcmQgdG8gYmUgcmVhZHkuIik7Cisg
ICAgTlNTdHJpbmcqIGNoYXJhY3RlckFzTlNTdHJpbmcgPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhD
U3RyaW5nOnRvU1REKHRvV0soY2hhcmFjdGVyKSkuY19zdHIoKV0gYXV0b3JlbGVhc2VdOworICAg
IFt3ZWJWaWV3IGNhbGxXaGVuS2V5Ym9hcmRJc1JlYWR5Ol57CisgICAgICAgIFtbSElERXZlbnRH
ZW5lcmF0b3Igc2hhcmVkSElERXZlbnRHZW5lcmF0b3JdIGtleURvd246Y2hhcmFjdGVyQXNOU1N0
cmluZyBjb21wbGV0aW9uQmxvY2s6XnsKKyAgICAgICAgICAgIG1fY29udGV4dC5hc3luY1Rhc2tD
b21wbGV0ZShjYWxsYmFja0lEKTsKKyAgICAgICAgfV07CisgICAgfV07Cit9CisKIGRvdWJsZSBV
SVNjcmlwdENvbnRyb2xsZXI6Om1pbmltdW1ab29tU2NhbGUoKSBjb25zdAogewogICAgIFRlc3RS
dW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CkBAIC0xMzAsNiArMTQ0LDE0IEBAIHZvaWQgVUlT
Y3JpcHRDb250cm9sbGVyOjpwbGF0Zm9ybVNldERpZEVuZFpvb21pbmdDYWxsYmFjaygpCiAgICAg
fTsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hvd0tleWJv
YXJkQ2FsbGJhY2soKQoreworICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7Cisg
ICAgd2ViVmlldy5kaWRTaG93S2V5Ym9hcmRDYWxsYmFjayA9IF57CisgICAgICAgIG1fY29udGV4
dC5maXJlQ2FsbGJhY2sobV9kaWRTaG93S2V5Ym9hcmRDYWxsYmFjayk7CisgICAgfTsKK30KKwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQzMTI2ZWUzNjE5NThhN2YxYzUx
MDc1NzhlNDdjY2QwMmFhYWZhMTIuLjRkZmE1NTRmMGIxYTdmOGE0YzMyZGY3NzcyYWRmMTA4Y2Qw
Mzk4ZDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wOS0zMCAgV2Vuc29uIEhzaWVoICA8
d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQga2V5Ym9hcmQgZXZl
bnQgc2VuZGluZyBmb3IgaU9TIGluIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTY3NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZHMgYSBuZXcgYmFzaWMgdGVzdCBmb3Ig
dGhlIG9uaW5wdXQgZXZlbnQgbGlzdGVuZXIgd2hlbiB0eXBpbmcgaW4gYSB0ZXh0IGZpZWxkLgor
CisgICAgICAgICogZmFzdC9ldmVudHMvaW9zL2lucHV0LXZhbHVlLWFmdGVyLW9uaW5wdXQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUt
YWZ0ZXItb25pbnB1dC5odG1sOiBBZGRlZC4KKwogMjAxNS0wOS0yOSAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBBbGxvdyB0ZXN0cyB0byBn
ZW5lcmF0ZSB1c2VyIGdlc3R1cmVzIGZvciBVSSB0ZXN0aW5nCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1
dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRiYmY0YjQ4MTZhOWFiYmIyMzlkOTE5OGVlZjZl
NTNkZjg0MzYxZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lv
cy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAK
KworU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgb25pbnB1dCwgdmFsdWUgaXMgbm93ICJhIgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LXZhbHVlLWFmdGVyLW9uaW5w
dXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9pbnB1dC12YWx1ZS1hZnRlci1v
bmlucHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWExNjdhZTY1ZTM4NDlkMTVlZWY5ZWMzYjU0MjU3MjA0
MDdmODE3YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9p
bnB1dC12YWx1ZS1hZnRlci1vbmlucHV0Lmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+CisK
KzxoZWFkPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxl
PTEuMCI+CisgICAgPHNjcmlwdCBpZD0idWktc2NyaXB0IiB0eXBlPSJ0ZXh0L3BsYWluIj4KKyAg
ICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgY29uc29sZS5sb2coIkZpcnN0IGNoZWNr
cG9pbnQiKTsKKyAgICAgICAgICAgIHVpQ29udHJvbGxlci5zaW5nbGVUYXBBdFBvaW50KDUwLCAy
NSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIlNlY29uZCBjaGVj
a3BvaW50Iik7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnR5cGVDaGFyYWN0ZXIoImEi
LCBmdW5jdGlvbigpIHsgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSkoKTsKKyAgICA8
L3NjcmlwdD4KKworICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikg
eworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGdl
dFVJU2NyaXB0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJ1aS1zY3JpcHQiKS50ZXh0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rp
b24gaGFuZGxlVmFsdWVDaGFuZ2VkKHZhbHVlKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29uc29sZSIpLnRleHRDb250ZW50ID0gIlN1Y2Nlc3NmdWxseSBoYW5kbGVk
IG9uaW5wdXQsIHZhbHVlIGlzIG5vdyBcIiIgKyB2YWx1ZSArICJcIiI7CisgICAgICAgICAgICB0
ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1
blRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyIHx8
ICF0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChnZXRVSVNjcmlwdCgpLCBmdW5jdGlvbihy
ZXN1bHQpIHsgfSk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
c3R5bGU9Im1hcmdpbjogMDsiIG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8aW5wdXQgc3R5bGU9
IndpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyIgaWQ9InRlc3QtaW5wdXQiIG9uaW5wdXQ9Imhh
bmRsZVZhbHVlQ2hhbmdlZCh0aGlzLnZhbHVlKSI+Cis8ZGl2IGlkPSJjb25zb2xlIj5GYWlsZWQg
dG8gaGFuZGxlIG9uaW5wdXQ8ZGl2PgorPC9ib2R5PgorCis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262196</attachid>
            <date>2015-09-30 15:22:20 -0700</date>
            <delta_ts>2015-09-30 21:58:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149676-20150930152155.patch</filename>
            <type>text/plain</type>
            <size>21177</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzRkNDcwZGE2Mjk0MjQwYjAyODJhMjg0NTkzOTBhNTQy
NTBjOWY5Mi4uNDMzMWJhOTI5MTY3M2JjZWQ3MTQ4NjFkZWEyZWI2NzZlMDk2MDVkZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5
IEBACisyMDE1LTA5LTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBrZXlib2FyZCBldmVudCBzZW5kaW5nIGZvciBpT1MgaW4gV2Vi
S2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5Njc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIGFuZCBzZW5kaW5nIGtleSBldmVudHMg
aW4gV2ViS2l0VGVzdFJ1bm5lci4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgaW4gYSBzaW1pbGFyCisg
ICAgICAgIHdheSBhcyB0b3VjaCBldmVudHMsIHVzaW5nIElPSElERXZlbnQgbWFjaGluZXJ5LiBB
IHF1aXJrIGluIGdlbmVyYXRpbmcgdGhlc2UgZXZlbnRzIGlzIHRoYXQgdGhlIGtleWJvYXJkCisg
ICAgICAgIG11c3QgZmlyc3QgYmUgcmFpc2VkIGJlZm9yZSBrZXkgZXZlbnRzIGNhbiBiZSBoYW5k
bGVkLCBzbyB0aGUgc2VuZGluZyBvZiBrZXkgZXZlbnRzIGlzIGRlZmVycmVkIHVudGlsIHRoZQor
ICAgICAgICBrZXlib2FyZCBoYXMgYmVlbiByYWlzZWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsOiBB
ZGRzIHRoZSB0eXBlQ2hhcmFjdGVyIEpTIGludGVyZmFjZS4KKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKToKKyAg
ICAgICAgKFdUUjo6VUlTY3JpcHRDb250cm9sbGVyOjpkaWRTaG93S2V5Ym9hcmRDYWxsYmFjayk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250
cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtUZXN0UnVubmVyV0tXZWJWaWV3IGluaXRXaXRoRnJhbWU6
Y29uZmlndXJhdGlvbjpdKTogUmVnaXN0ZXJzIHRoZSBUZXN0UnVubmVyV0tXZWJWaWV3IHRvIGxp
c3RlbiB0bworICAgICAgICAgICAgICAgIHRoZSBub3RpZmljYXRpb25zIHRoYXQgdGhlIGtleWJv
YXJkIGhhcyBiZWVuIHJhaXNlZCBvciBsb3dlcmVkLgorICAgICAgICAoLVtUZXN0UnVubmVyV0tX
ZWJWaWV3IF9rZXlib2FyZERpZFNob3c6XSk6CisgICAgICAgICgtW1Rlc3RSdW5uZXJXS1dlYlZp
ZXcgX2tleWJvYXJkRGlkSGlkZTpdKToKKyAgICAgICAgKC1bVGVzdFJ1bm5lcldLV2ViVmlldyBj
YWxsV2hlbktleWJvYXJkSXNSZWFkeTpdKTogR2l2ZW4gYSBjYWxsYmFjaywgaW52b2tlcyB0aGUg
Y2FsbGJhY2sgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICBrZXlib2FyZCBpcyBwcmVwYXJlZCB0
byBhY2NlcHQgaW5wdXQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRH
ZW5lcmF0b3IuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVy
YXRvci5tOgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBfc2VuZElPSElES2V5Ym9hcmRF
dmVudDp1c2FnZTppc0tleURvd246XSk6IEhlbHBlciB0byBzZW5kIGEgSElEIGtleWJvYXJkIGV2
ZW50LgorICAgICAgICAoc2hvdWxkV3JhcFdpdGhTaGlmdEtleUV2ZW50Rm9yQ2hhcmFjdGVyKTog
SGVscGVyIHVzZWQgdG8gZ2VuZXJhdGUga2V5IGV2ZW50cy4KKyAgICAgICAgKGhpZFVzYWdlQ29k
ZUZvckNoYXJhY3Rlcik6IERpdHRvLgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBrZXlE
b3duOmNvbXBsZXRpb25CbG9jazpdKTogU3ludGhlc2l6ZXMgYW5kIHNlbmRzIEhJREtleWJvYXJk
RXZlbnRzLCB0cmlnZ2VyaW5nCisgICAgICAgICAgICAgICAgYSBrZXlEb3duIGV2ZW50IGluIFdl
YktpdC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJ
T1MubW06CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6dHlwZUNoYXJhY3Rlcik6
IEltcGxlbWVudHMgdGhlIHR5cGVDaGFyYWN0ZXIgSlMgaW50ZXJmYWNlLgorICAgICAgICAoV1RS
OjpVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2sp
OgorCiAyMDE1LTA5LTI5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdIEFsbG93IHRlc3RzIHRvIGdlbmVyYXRlIHVzZXIgZ2VzdHVyZXMgZm9y
IFVJIHRlc3RpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRD
b250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCmlu
ZGV4IGQwODA5MjMxMDE4YzE5YTU5NjMyZTk2MDMxNWU0ZTFjOGQ2ZmZlZjYuLjVhNGE2MTgzODQx
YzE5NDJjMDVjNjZjMDdiZmUwN2JmNzI1YTMzNzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvQmluZGluZ3MvVUlT
Y3JpcHRDb250cm9sbGVyLmlkbApAQCAtMzUsNiArMzUsOCBAQCBpbnRlcmZhY2UgVUlTY3JpcHRD
b250cm9sbGVyIHsKICAgICB2b2lkIHNpbmdsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIG9i
amVjdCBjYWxsYmFjayk7CiAgICAgdm9pZCBkb3VibGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5
LCBvYmplY3QgY2FsbGJhY2spOwogCisgICAgdm9pZCB0eXBlQ2hhcmFjdGVyKERPTVN0cmluZyBj
aGFyYWN0ZXIsIG9iamVjdCBjYWxsYmFjayk7CisKICAgICBhdHRyaWJ1dGUgb2JqZWN0IHdpbGxC
ZWdpblpvb21pbmdDYWxsYmFjazsKICAgICBhdHRyaWJ1dGUgb2JqZWN0IGRpZEVuZFpvb21pbmdD
YWxsYmFjazsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlT
Y3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggYzYxYzI2ZTllYjE3YTE3
MTYwNmJhMTQ3OTRjZGU3MjI5YTZkMWVhOS4uYWQ4YzkzMjU3ZmQxYTNhNjE1ZDZlNTM1MmQxNWVk
YjE0ZGUxYzk4OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENv
bnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpbmNsdWRlICJKU1VJU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlVJU2NyaXB0
Q29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuaD4KIAogbmFt
ZXNwYWNlIFdUUiB7CiAKQEAgLTc1LDYgKzc0LDE5IEBAIEpTVmFsdWVSZWYgVUlTY3JpcHRDb250
cm9sbGVyOjpkaWRFbmRab29taW5nQ2FsbGJhY2soKSBjb25zdAogICAgIHJldHVybiBtX2NvbnRl
eHQuY2FsbGJhY2tXaXRoSUQobV9kaWRFbmRab29taW5nQ2FsbGJhY2spOwogfQogCisjaWYgUExB
VEZPUk0oSU9TKQordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldERpZFNob3dLZXlib2FyZENh
bGxiYWNrKEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgbV9kaWRTaG93S2V5Ym9hcmRDYWxs
YmFjayA9IG1fY29udGV4dC5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICBwbGF0Zm9y
bVNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKCk7Cit9CisKK0pTVmFsdWVSZWYgVUlTY3JpcHRD
b250cm9sbGVyOjpkaWRTaG93S2V5Ym9hcmRDYWxsYmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fY29udGV4dC5jYWxsYmFja1dpdGhJRChtX2RpZFNob3dLZXlib2FyZENhbGxiYWNrKTsKK30K
KyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKElPUykKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp6
b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYpCiB7CkBAIC04OCw2ICsxMDAsMTAgQEAgdm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpT
VmFsdWVSZWYpCiB7CiB9CiAKK3ZvaWQgdHlwZUNoYXJhY3RlcihKU1N0cmluZ1JlZiwgSlNWYWx1
ZVJlZikKK3sKK30KKwogZG91YmxlIFVJU2NyaXB0Q29udHJvbGxlcjo6em9vbVNjYWxlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gMTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggMzAzZWRlYjZi
NzJlNjM1NTU1NWMwNDk5M2U1MDAyOGIzNmMzNzM5MS4uYmE1MGVjZmJhODE1ZTA1OGZhMjk4M2U5
ZWUyMzlmZmE0ZDk1YjNiYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNj
cmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTQ4LDEyICs0OCwx
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzaW5nbGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBK
U1ZhbHVlUmVmIGNhbGxiYWNrKTsKICAgICB2b2lkIGRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBs
b25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spOwogICAgIAorICAgIHZvaWQgdHlwZUNoYXJhY3Rl
cihKU1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYgY2FsbGJhY2spOworCiAgICAgdm9p
ZCBzZXRXaWxsQmVnaW5ab29taW5nQ2FsbGJhY2soSlNWYWx1ZVJlZik7CiAgICAgSlNWYWx1ZVJl
ZiB3aWxsQmVnaW5ab29taW5nQ2FsbGJhY2soKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RGlkRW5k
Wm9vbWluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpOwogICAgIEpTVmFsdWVSZWYgZGlkRW5kWm9vbWlu
Z0NhbGxiYWNrKCkgY29uc3Q7CiAKKyNpZiBQTEFURk9STShJT1MpCisgICAgdm9pZCBzZXREaWRT
aG93S2V5Ym9hcmRDYWxsYmFjayhKU1ZhbHVlUmVmKTsKKyAgICBKU1ZhbHVlUmVmIGRpZFNob3dL
ZXlib2FyZENhbGxiYWNrKCkgY29uc3Q7CisjZW5kaWYKKwogICAgIGRvdWJsZSB6b29tU2NhbGUo
KSBjb25zdDsKICAgICBkb3VibGUgbWluaW11bVpvb21TY2FsZSgpIGNvbnN0OwogICAgIGRvdWJs
ZSBtYXhpbXVtWm9vbVNjYWxlKCkgY29uc3Q7CkBAIC02Nyw2ICs3NCw5IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCBwbGF0Zm9ybVNldFdpbGxCZWdpblpvb21pbmdDYWxsYmFjaygpOwogICAg
IHZvaWQgcGxhdGZvcm1TZXREaWRFbmRab29taW5nQ2FsbGJhY2soKTsKKyNpZiBQTEFURk9STShJ
T1MpCisgICAgdm9pZCBwbGF0Zm9ybVNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKCk7CisjZW5k
aWYKIAogICAgIHZpcnR1YWwgSlNDbGFzc1JlZiB3cmFwcGVyQ2xhc3MoKSBvdmVycmlkZTsKIApA
QCAtNzYsNiArODYsNyBAQCBwcml2YXRlOgogCiAgICAgdW5zaWduZWQgbV93aWxsQmVnaW5ab29t
aW5nQ2FsbGJhY2sgeyAwIH07CiAgICAgdW5zaWduZWQgbV9kaWRFbmRab29taW5nQ2FsbGJhY2sg
eyAwIH07CisgICAgdW5zaWduZWQgbV9kaWRTaG93S2V5Ym9hcmRDYWxsYmFjayB7IDAgfTsKIH07
CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5l
cldLV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tX
ZWJWaWV3LmgKaW5kZXggM2YxODU5MGEyMjNhMjNlOWU2ZmYxZjhiMDg0MDJlN2E4Yjc4NWZlMy4u
MWQ0NDY2OTNkYjZmNDVmZjA4MDhiNTJhZjY3ZjMyMzRkODljZTE4NiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKQEAgLTMzLDkg
KzMzLDEzIEBACiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkIChed2lsbEJlZ2lu
Wm9vbWluZ0NhbGxiYWNrKSh2b2lkKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lk
ICheZGlkRW5kWm9vbWluZ0NhbGxiYWNrKSh2b2lkKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBj
b3B5KSB2b2lkICheZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2spKHZvaWQpOworQHByb3BlcnR5IChu
b25hdG9taWMpIEJPT0wga2V5Ym9hcmRNYXlBY2NlcHRLZXlJbnB1dDsKIAotLSAodm9pZCl6b29t
VG9TY2FsZTooZG91YmxlKXNjYWxlIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25I
YW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcjsKKy0gKGluc3RhbmNldHlw
ZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgY29uZmlndXJhdGlvbjooV0tXZWJWaWV3Q29u
ZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb247CiAKKy0gKHZvaWQpem9vbVRvU2NhbGU6KGRvdWJs
ZSlzY2FsZSBhbmltYXRlZDooQk9PTClhbmltYXRlZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAo
Xikodm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CistICh2b2lkKWNhbGxXaGVuS2V5Ym9hcmRJc1Jl
YWR5Oih2b2lkICheKSh2b2lkKSljYWxsYmFjazsKICNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXgg
Y2M1MzBiMGQyOTk0YzFkZDZiOWQ2NzkwNzM0ODk4NDJmMGRlZmNmYi4uYjc5NTU0NmQwY2MwMzdk
NWM0YTUyNTZiNGMzZmE5N2QyNmYwYjM1YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQpAQCAtNTcsNiArNTcsMTcgQEAgLSAo
dm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZpZXdMb2NhdGlv
biBvZmZzZXQ6KE5TU2l6ZSlpbmkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQorLSAoaW5z
dGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb25maWd1cmF0aW9uOihXS1dl
YlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIGlmIChzZWxmID0gW3N1
cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWUgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSkgewor
ICAgICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciogY2VudGVyID0gW05TTm90aWZpY2F0aW9uQ2Vu
dGVyIGRlZmF1bHRDZW50ZXJdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNlbGYgc2Vs
ZWN0b3I6QHNlbGVjdG9yKF9rZXlib2FyZERpZFNob3c6KSBuYW1lOlVJS2V5Ym9hcmREaWRTaG93
Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9rZXlib2FyZERpZEhpZGU6KSBuYW1lOlVJS2V5Ym9hcmRE
aWRIaWRlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBfa2V5Ym9hcmRNYXlBY2Nl
cHRLZXlJbnB1dCA9IE5POworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKwogLSAodm9pZCl6
b29tVG9TY2FsZTooZG91YmxlKXNjYWxlIGFuaW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRp
b25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewogICAgIEFTU0VS
VCghc2VsZi56b29tVG9TY2FsZUNvbXBsZXRpb25IYW5kbGVyKTsKQEAgLTY1LDYgKzc2LDE4IEBA
IC0gKHZvaWQpem9vbVRvU2NhbGU6KGRvdWJsZSlzY2FsZSBhbmltYXRlZDooQk9PTClhbmltYXRl
ZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pCiAgICAgW3NlbGYuc2Nyb2xsVmlldyBzZXRab29tU2Nh
bGU6c2NhbGUgYW5pbWF0ZWQ6YW5pbWF0ZWRdOwogfQogCistICh2b2lkKV9rZXlib2FyZERpZFNo
b3c6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgX2tleWJvYXJkTWF5QWNj
ZXB0S2V5SW5wdXQgPSBZRVM7CisgICAgaWYgKHNlbGYuZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2sp
CisgICAgICAgIHNlbGYuZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2soKTsKK30KKworLSAodm9pZClf
a2V5Ym9hcmREaWRIaWRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIF9r
ZXlib2FyZE1heUFjY2VwdEtleUlucHV0ID0gTk87Cit9CisKIC0gKHZvaWQpc2Nyb2xsVmlld1dp
bGxCZWdpblpvb21pbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZpZXc6KG51bGxh
YmxlIFVJVmlldyAqKXZpZXcKIHsKICAgICBbc3VwZXIgc2Nyb2xsVmlld1dpbGxCZWdpblpvb21p
bmc6c2Nyb2xsVmlldyB3aXRoVmlldzp2aWV3XTsKQEAgLTg1LDYgKzEwOCwxNiBAQCAtICh2b2lk
KXNjcm9sbFZpZXdEaWRFbmRab29taW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhW
aWV3OihVSVZpZXcgKil2aQogICAgICAgICBzZWxmLnpvb21Ub1NjYWxlQ29tcGxldGlvbkhhbmRs
ZXIgPSBudWxscHRyOwogICAgIH0KIH0KKworLSAodm9pZCljYWxsV2hlbktleWJvYXJkSXNSZWFk
eToodm9pZCAoXikodm9pZCkpY2FsbGJhY2sKK3sKKyAgICBpZiAoc2VsZi5rZXlib2FyZE1heUFj
Y2VwdEtleUlucHV0KSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgLy8gV2UgZXhwZWN0IHRoZSBrZXlib2FyZCB0byBzaG93LCBzbyBqdXN0IHJlZ2lz
dGVyIHRoZSBjYWxsYmFjay4KKyAgICBzZWxmLmRpZFNob3dLZXlib2FyZENhbGxiYWNrID0gY2Fs
bGJhY2s7Cit9CiAjZW5kaWYKIAogQGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L0hJREV2ZW50R2VuZXJhdG9yLmgKaW5kZXggMjEyYjIxNjUxZDJiZjZjNzA0ZDg2OGM3N2ZjODIz
YWE2N2YzNGQxOS4uZWViNzQwYTI3MjIwOWEwODBkZDdkMDhhZDBjMjgzNTBhNmZlODBkOCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oCkBAIC01
MCw0ICs1MCw3IEBACiAKIC0gKHZvaWQpbWFya2VyRXZlbnRSZWNlaXZlZDooSU9ISURFdmVudFJl
ZilldmVudDsKIAorLy8gS2V5Ym9hcmQKKy0gKHZvaWQpa2V5RG93bjooTlNTdHJpbmcqKWNoYXJh
Y3RlciBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25CbG9jazsKKwog
QGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5l
cmF0b3IubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5t
bQppbmRleCAyZGRlNmE4NDAxZjY3MTgyMGEzYTlmMDdlN2FmNTg0YTI4OTY0YzhhLi40YmNkOTRh
OWJkZDQ3OGMzM2NmNzc3Y2U2YzI1NWM4NzkyZjIxNTY0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbQpAQCAtMTI5LDYgKzEyOSwxNiBAQCAt
IChpbnN0YW5jZXR5cGUpaW5pdAogICAgIHJldHVybiBzZWxmOwogfQogCistICh2b2lkKV9zZW5k
SU9ISURLZXlib2FyZEV2ZW50Oih1aW50NjRfdCl0aW1lc3RhbXAgdXNhZ2U6KHVpbnQzMl90KXVz
YWdlIGlzS2V5RG93bjooYm9vbClpc0tleURvd24KK3sKKyAgICBbc2VsZiBfc2VuZEhJREV2ZW50
OklPSElERXZlbnRDcmVhdGVLZXlib2FyZEV2ZW50KGtDRkFsbG9jYXRvckRlZmF1bHQsCisgICAg
ICAgIHRpbWVzdGFtcCwKKyAgICAgICAga0hJRFBhZ2VfS2V5Ym9hcmRPcktleXBhZCwKKyAgICAg
ICAgdXNhZ2UsCisgICAgICAgIGlzS2V5RG93biwKKyAgICAgICAga0lPSElERXZlbnRPcHRpb25O
b25lKV07Cit9CisKIC0gKElPSElERXZlbnRSZWYpX2NyZWF0ZUlPSElERXZlbnRUeXBlOihIYW5k
RXZlbnRUeXBlKWV2ZW50VHlwZQogewogICAgIEJPT0wgaXNUb3VjaGluZyA9IChldmVudFR5cGUg
PT0gSGFuZEV2ZW50VG91Y2hlZCB8fCBldmVudFR5cGUgPT0gSGFuZEV2ZW50TW92ZWQgfHwgZXZl
bnRUeXBlID09IEhhbmRFdmVudENob3JkQ2hhbmdlZCk7CkBAIC00MjgsNCArNDM4LDE2OSBAQCAt
ICh2b2lkKW1hcmtlckV2ZW50UmVjZWl2ZWQ6KElPSElERXZlbnRSZWYpZXZlbnQKICAgICB9CiB9
CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRXcmFwV2l0aFNoaWZ0S2V5RXZlbnRGb3JDaGFy
YWN0ZXIoTlNTdHJpbmcqIGtleSkKK3sKKyAgICBpZiAoW2tleSBsZW5ndGhdICE9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQga2V5Q29kZSA9IFtrZXkgY2hhcmFjdGVyQXRJbmRl
eDowXTsKKyAgICBpZiAoNjUgPD0ga2V5Q29kZSAmJiBrZXlDb2RlIDw9IDkwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKGtleUNvZGUpIHsKKyAgICBjYXNlICdgJzoKKyAgICBj
YXNlICchJzoKKyAgICBjYXNlICdAJzoKKyAgICBjYXNlICcjJzoKKyAgICBjYXNlICckJzoKKyAg
ICBjYXNlICclJzoKKyAgICBjYXNlICdeJzoKKyAgICBjYXNlICcmJzoKKyAgICBjYXNlICcqJzoK
KyAgICBjYXNlICcoJzoKKyAgICBjYXNlICcpJzoKKyAgICBjYXNlICdfJzoKKyAgICBjYXNlICcr
JzoKKyAgICBjYXNlICd7JzoKKyAgICBjYXNlICd9JzoKKyAgICBjYXNlICd8JzoKKyAgICBjYXNl
ICc6JzoKKyAgICBjYXNlICciJzoKKyAgICBjYXNlICc8JzoKKyAgICBjYXNlICc+JzoKKyAgICBj
YXNlICc/JzoKKyAgICBjYXNlICd+JzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBoaWRVc2FnZUNvZGVG
b3JDaGFyYWN0ZXIoTlNTdHJpbmcqIGtleSkKK3sKKyAgICBjb25zdCBpbnQgdXBwZXJjYXNlQWxw
aGFiZXRpY09mZnNldCA9ICdBJyAtIGtISURVc2FnZV9LZXlib2FyZEE7CisgICAgY29uc3QgaW50
IGxvd2VyY2FzZUFscGhhYmV0aWNPZmZzZXQgPSAnYScgLSBrSElEVXNhZ2VfS2V5Ym9hcmRBOwor
ICAgIGNvbnN0IGludCBudW1lcmljTm9uWmVyb09mZnNldCA9ICcxJyAtIGtISURVc2FnZV9LZXli
b2FyZDE7CisgICAgaWYgKFtrZXkgbGVuZ3RoXSA9PSAxKSB7CisgICAgICAgIC8vIEhhbmRsZSBh
bHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgYmFzaWMgc3ltYm9scy4KKyAgICAgICAgaW50IGtl
eUNvZGUgPSBba2V5IGNoYXJhY3RlckF0SW5kZXg6MF07CisgICAgICAgIGlmICg5NyA8PSBrZXlD
b2RlICYmIGtleUNvZGUgPD0gMTIyKSAvLyBIYW5kbGUgYS16LgorICAgICAgICAgICAgcmV0dXJu
IGtleUNvZGUgLSBsb3dlcmNhc2VBbHBoYWJldGljT2Zmc2V0OworCisgICAgICAgIGlmICg2NSA8
PSBrZXlDb2RlICYmIGtleUNvZGUgPD0gOTApIC8vIEhhbmRsZSBBLVouCisgICAgICAgICAgICBy
ZXR1cm4ga2V5Q29kZSAtIHVwcGVyY2FzZUFscGhhYmV0aWNPZmZzZXQ7CisKKyAgICAgICAgaWYg
KDQ5IDw9IGtleUNvZGUgJiYga2V5Q29kZSA8PSA1NykgLy8gSGFuZGxlIDEtOS4KKyAgICAgICAg
ICAgIHJldHVybiBrZXlDb2RlIC0gbnVtZXJpY05vblplcm9PZmZzZXQ7CisKKyAgICAgICAgLy8g
SGFuZGxlIGFsbCBvdGhlciBjYXNlcy4KKyAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAg
ICAgIGNhc2UgJ2AnOgorICAgICAgICBjYXNlICd+JzoKKyAgICAgICAgICAgIHJldHVybiBrSElE
VXNhZ2VfS2V5Ym9hcmRHcmF2ZUFjY2VudEFuZFRpbGRlOworICAgICAgICBjYXNlICchJzoKKyAg
ICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQxOworICAgICAgICBjYXNlICdAJzoK
KyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQyOworICAgICAgICBjYXNlICcj
JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQzOworICAgICAgICBjYXNl
ICckJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ0OworICAgICAgICBj
YXNlICclJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ1OworICAgICAg
ICBjYXNlICdeJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ2OworICAg
ICAgICBjYXNlICcmJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ3Owor
ICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ4
OworICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9h
cmQ5OworICAgICAgICBjYXNlICcpJzoKKyAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICBy
ZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkMDsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgIGNh
c2UgJ18nOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZEh5cGhlbjsKKyAg
ICAgICAgY2FzZSAnPSc6CisgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgcmV0dXJuIGtI
SURVc2FnZV9LZXlib2FyZEVxdWFsU2lnbjsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAg
ICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFRhYjsKKyAgICAgICAgY2FzZSAnWyc6CisgICAg
ICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZE9wZW5C
cmFja2V0OworICAgICAgICBjYXNlICddJzoKKyAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAg
ICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkQ2xvc2VCcmFja2V0OworICAgICAgICBjYXNlICdc
XCc6CisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXli
b2FyZEJhY2tzbGFzaDsKKyAgICAgICAgY2FzZSAnOyc6CisgICAgICAgIGNhc2UgJzonOgorICAg
ICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFNlbWljb2xvbjsKKyAgICAgICAgY2Fz
ZSAnXCcnOgorICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2Vf
S2V5Ym9hcmRRdW90ZTsKKyAgICAgICAgY2FzZSAnXHInOgorICAgICAgICBjYXNlICdcbic6Cisg
ICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUmV0dXJuT3JFbnRlcjsKKyAgICAg
ICAgY2FzZSAnLCc6CisgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgcmV0dXJuIGtISURV
c2FnZV9LZXlib2FyZENvbW1hOworICAgICAgICBjYXNlICcuJzoKKyAgICAgICAgY2FzZSAnPic6
CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUGVyaW9kOworICAgICAgICBj
YXNlICcvJzoKKyAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdl
X0tleWJvYXJkU2xhc2g7CisgICAgICAgIGNhc2UgJyAnOgorICAgICAgICAgICAgcmV0dXJuIGtI
SURVc2FnZV9LZXlib2FyZFNwYWNlYmFyOworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IGlu
dCBmdW5jdGlvbktleU9mZnNldCA9IGtISURVc2FnZV9LZXlib2FyZEYxOworICAgIGZvciAoaW50
IGZ1bmN0aW9uS2V5SW5kZXggPSAxOyBmdW5jdGlvbktleUluZGV4IDw9IDEyOyArK2Z1bmN0aW9u
S2V5SW5kZXgpIHsKKyAgICAgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiRiVkIiwgZnVuY3Rpb25LZXlJbmRleF1dKQorICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uS2V5T2Zmc2V0ICsgZnVuY3Rpb25LZXlJbmRleCAtIDE7CisgICAgfQor
ICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImVzY2FwZSJdKQorICAgICAgICByZXR1cm4g
a0hJRFVzYWdlX0tleWJvYXJkRXNjYXBlOworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpA
InJldHVybiJdIHx8IFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAiZW50ZXIiXSkKKyAgICAgICAgcmV0
dXJuIGtISURVc2FnZV9LZXlib2FyZFJldHVybk9yRW50ZXI7CisgICAgaWYgKFtrZXkgaXNFcXVh
bFRvU3RyaW5nOkAibGVmdEFycm93Il0pCisgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9h
cmRMZWZ0QXJyb3c7CisgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAicmlnaHRBcnJvdyJd
KQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUmlnaHRBcnJvdzsKKyAgICBpZiAo
W2tleSBpc0VxdWFsVG9TdHJpbmc6QCJ1cEFycm93Il0pCisgICAgICAgIHJldHVybiBrSElEVXNh
Z2VfS2V5Ym9hcmRVcEFycm93OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImRvd25B
cnJvdyJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkRG93bkFycm93OworICAg
IGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImRlbGV0ZSJdKQorICAgICAgICByZXR1cm4ga0hJ
RFVzYWdlX0tleWJvYXJkRGVsZXRlT3JCYWNrc3BhY2U7CisgICAgLy8gVGhlIHNpbXVsYXRvciBr
ZXlib2FyZCBpbnRlcnByZXRzIGJvdGggbGVmdCBhbmQgcmlnaHQgbW9kaWZpZXIga2V5cyB1c2lu
ZyB0aGUgbGVmdCB2ZXJzaW9uIG9mIHRoZSB1c2FnZSBjb2RlLgorICAgIGlmIChba2V5IGlzRXF1
YWxUb1N0cmluZzpAImxlZnRDb250cm9sIl0gfHwgW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJyaWdo
dENvbnRyb2wiXSkKKyAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZExlZnRDb250cm9s
OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRTaGlmdCJdIHx8IFtrZXkgaXNF
cXVhbFRvU3RyaW5nOkAicmlnaHRTaGlmdCJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tl
eWJvYXJkTGVmdFNoaWZ0OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRBbHQi
XSB8fCBba2V5IGlzRXF1YWxUb1N0cmluZzpAInJpZ2h0QWx0Il0pCisgICAgICAgIHJldHVybiBr
SElEVXNhZ2VfS2V5Ym9hcmRMZWZ0QWx0OworCisgICAgcmV0dXJuIDA7Cit9CisKKy0gKHZvaWQp
a2V5RG93bjooTlNTdHJpbmcqKWNoYXJhY3RlciBjb21wbGV0aW9uQmxvY2s6KHZvaWQgKF4pKHZv
aWQpKWNvbXBsZXRpb25CbG9jaworeworICAgIGJvb2wgc2hvdWxkV3JhcFdpdGhTaGlmdCA9IHNo
b3VsZFdyYXBXaXRoU2hpZnRLZXlFdmVudEZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIHVp
bnQzMl90IHVzYWdlID0gaGlkVXNhZ2VDb2RlRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAg
dWludDY0X3QgYWJzb2x1dGVNYWNoVGltZSA9IG1hY2hfYWJzb2x1dGVfdGltZSgpOworCisgICAg
aWYgKHNob3VsZFdyYXBXaXRoU2hpZnQpCisgICAgICAgIFtzZWxmIF9zZW5kSU9ISURLZXlib2Fy
ZEV2ZW50OmFic29sdXRlTWFjaFRpbWUgdXNhZ2U6a0hJRFVzYWdlX0tleWJvYXJkTGVmdFNoaWZ0
IGlzS2V5RG93bjp0cnVlXTsKKworICAgIFtzZWxmIF9zZW5kSU9ISURLZXlib2FyZEV2ZW50OmFi
c29sdXRlTWFjaFRpbWUgdXNhZ2U6dXNhZ2UgaXNLZXlEb3duOnRydWVdOworICAgIFtzZWxmIF9z
ZW5kSU9ISURLZXlib2FyZEV2ZW50OmFic29sdXRlTWFjaFRpbWUgdXNhZ2U6dXNhZ2UgaXNLZXlE
b3duOmZhbHNlXTsKKworICAgIGlmIChzaG91bGRXcmFwV2l0aFNoaWZ0KQorICAgICAgICBbc2Vs
ZiBfc2VuZElPSElES2V5Ym9hcmRFdmVudDphYnNvbHV0ZU1hY2hUaW1lIHVzYWdlOmtISURVc2Fn
ZV9LZXlib2FyZExlZnRTaGlmdCBpc0tleURvd246ZmFsc2VdOworCisgICAgW3NlbGYgX3NlbmRN
YXJrZXJISURFdmVudFdpdGhDb21wbGV0aW9uQmxvY2s6Y29tcGxldGlvbkJsb2NrXTsKK30KKwog
QGVuZApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9s
bGVySU9TLm1tCmluZGV4IDhhODY0ODYyYjc3OGVhM2U1NTVmZGRmMzI4ZWUzNjVjMDZmM2NjYTgu
LmNhZjM4MWNkOGM4M2YxZjRhZGU2ODRlN2MwNmMwNWM2OGIzZTc1ODggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiSElERXZlbnRHZW5lcmF0b3IuaCIKICNpbXBvcnQgIlBs
YXRmb3JtV2ViVmlldy5oIgorI2ltcG9ydCAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW1wb3J0ICJU
ZXN0Q29udHJvbGxlci5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9y
dCAiVUlTY3JpcHRDb250ZXh0LmgiCkBAIC05Miw2ICs5MywxOCBAQCB2b2lkIFVJU2NyaXB0Q29u
dHJvbGxlcjo6ZG91YmxlVGFwQXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxs
YmFjaykKICAgICB9XTsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnR5cGVDaGFyYWN0
ZXIoSlNTdHJpbmdSZWYgY2hhcmFjdGVyLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQoreworICAgIFRl
c3RSdW5uZXJXS1dlYlZpZXcqIHdlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisgICAgdW5zaWduZWQgY2FsbGJhY2tJRCA9
IG1fY29udGV4dC5wcmVwYXJlRm9yQXN5bmNUYXNrKGNhbGxiYWNrKTsKKyAgICBOU1N0cmluZyog
Y2hhcmFjdGVyQXNOU1N0cmluZyA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aENTdHJpbmc6dG9TVEQo
dG9XSyhjaGFyYWN0ZXIpKS5jX3N0cigpXSBhdXRvcmVsZWFzZV07CisgICAgW3dlYlZpZXcgY2Fs
bFdoZW5LZXlib2FyZElzUmVhZHk6XnsKKyAgICAgICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFy
ZWRISURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjpjaGFyYWN0ZXJBc05TU3RyaW5nIGNvbXBsZXRp
b25CbG9jazpeeworICAgICAgICAgICAgbV9jb250ZXh0LmFzeW5jVGFza0NvbXBsZXRlKGNhbGxi
YWNrSUQpOworICAgICAgICB9XTsKKyAgICB9XTsKK30KKwogZG91YmxlIFVJU2NyaXB0Q29udHJv
bGxlcjo6bWluaW11bVpvb21TY2FsZSgpIGNvbnN0CiB7CiAgICAgVGVzdFJ1bm5lcldLV2ViVmll
dyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVZpZXcoKTsKQEAgLTEzMCw2ICsxNDMsMTQgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xs
ZXI6OnBsYXRmb3JtU2V0RGlkRW5kWm9vbWluZ0NhbGxiYWNrKCkKICAgICB9OwogfQogCit2b2lk
IFVJU2NyaXB0Q29udHJvbGxlcjo6cGxhdGZvcm1TZXREaWRTaG93S2V5Ym9hcmRDYWxsYmFjaygp
Cit7CisgICAgVGVzdFJ1bm5lcldLV2ViVmlldyAqd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICB3ZWJWaWV3LmRp
ZFNob3dLZXlib2FyZENhbGxiYWNrID0gXnsKKyAgICAgICAgbV9jb250ZXh0LmZpcmVDYWxsYmFj
ayhtX2RpZFNob3dLZXlib2FyZENhbGxiYWNrKTsKKyAgICB9OworfQorCiB9CiAKICNlbmRpZiAv
LyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDMxMjZlZTM2MTk1OGE3ZjFjNTEwNzU3OGU0N2NjZDAy
YWFhZmExMi4uNGRmYTU1NGYwYjFhN2Y4YTRjMzJkZjc3NzJhZGYxMDhjZDAzOThkNSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE1IEBACisyMDE1LTA5LTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBrZXlib2FyZCBldmVudCBzZW5kaW5nIGZv
ciBpT1MgaW4gV2ViS2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5Njc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkcyBhIG5ldyBiYXNpYyB0ZXN0IGZvciB0aGUgb25pbnB1dCBl
dmVudCBsaXN0ZW5lciB3aGVuIHR5cGluZyBpbiBhIHRleHQgZmllbGQuCisKKyAgICAgICAgKiBm
YXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0
Lmh0bWw6IEFkZGVkLgorCiAyMDE1LTA5LTI5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEFsbG93IHRlc3RzIHRvIGdlbmVyYXRlIHVzZXIg
Z2VzdHVyZXMgZm9yIFVJIHRlc3RpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZl
bnRzL2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40ZGJiZjRiNDgxNmE5YWJiYjIzOWQ5MTk4ZWVmNmU1M2RmODQzNjFmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LXZhbHVl
LWFmdGVyLW9uaW5wdXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorCitTdWNjZXNzZnVs
bHkgaGFuZGxlZCBvbmlucHV0LCB2YWx1ZSBpcyBub3cgImEiCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LXZhbHVlLWFmdGVyLW9uaW5wdXQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41YTE2N2FlNjVlMzg0OWQxNWVlZjllYzNiNTQyNTcyMDQwN2Y4MTdhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LXZhbHVlLWFm
dGVyLW9uaW5wdXQuaHRtbApAQCAtMCwwICsxLDQ2IEBACis8aHRtbD4KKworPGhlYWQ+CisgICAg
PG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MS4wIj4KKyAgICA8
c2NyaXB0IGlkPSJ1aS1zY3JpcHQiIHR5cGU9InRleHQvcGxhaW4iPgorICAgICAgICAoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBjb25zb2xlLmxvZygiRmlyc3QgY2hlY2twb2ludCIpOworICAg
ICAgICAgICAgdWlDb250cm9sbGVyLnNpbmdsZVRhcEF0UG9pbnQoNTAsIDI1LCBmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygiU2Vjb25kIGNoZWNrcG9pbnQiKTsKKyAg
ICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudHlwZUNoYXJhY3RlcigiYSIsIGZ1bmN0aW9uKCkg
eyB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KSgpOworICAgIDwvc2NyaXB0PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0VUlTY3JpcHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVp
LXNjcmlwdCIpLnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVWYWx1
ZUNoYW5nZWQodmFsdWUpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikudGV4dENvbnRlbnQgPSAiU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgb25pbnB1dCwgdmFs
dWUgaXMgbm93IFwiIiArIHZhbHVlICsgIlwiIjsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXRlc3RSdW5uZXIu
cnVuVUlTY3JpcHQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB0ZXN0
UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgeyB9KTsK
KyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBzdHlsZT0ibWFyZ2lu
OiAwOyIgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDEwMHB4
OyBoZWlnaHQ6IDUwcHg7IiBpZD0idGVzdC1pbnB1dCIgb25pbnB1dD0iaGFuZGxlVmFsdWVDaGFu
Z2VkKHRoaXMudmFsdWUpIj4KKzxkaXYgaWQ9ImNvbnNvbGUiPkZhaWxlZCB0byBoYW5kbGUgb25p
bnB1dDxkaXY+Cis8L2JvZHk+CisKKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262231</attachid>
            <date>2015-09-30 21:58:11 -0700</date>
            <delta_ts>2015-09-30 22:12:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149676-20150930215744.patch</filename>
            <type>text/plain</type>
            <size>24141</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzRkNDcwZGE2Mjk0MjQwYjAyODJhMjg0NTkzOTBhNTQy
NTBjOWY5Mi4uNjdhMGNiZjRlMmY5OTczNzAzZjA1NDRjNmY5YzEyMGVlMTA4ZDE4OSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQz
IEBACisyMDE1LTA5LTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBrZXlib2FyZCBldmVudCBzZW5kaW5nIGZvciBpT1MgaW4gV2Vi
S2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5Njc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIGFuZCBzZW5kaW5nIGtleSBldmVudHMg
aW4gV2ViS2l0VGVzdFJ1bm5lci4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgaW4gYSBzaW1pbGFyCisg
ICAgICAgIHdheSBhcyB0b3VjaCBldmVudHMsIHVzaW5nIElPSElERXZlbnQgbWFjaGluZXJ5LiBB
bHNvIGFkZHMgY2FsbGJhY2tzIHRvIHRoZSBVSVNjcmlwdENvbnRyb2xsZXIgSlMgQVBJIHRoYXQK
KyAgICAgICAgYWxsb3dzIHVzIHRvIHJ1biBjb2RlIHdoZW4gdGhlIGtleWJvYXJkIGlzIHNob3du
IG9yIGhpZGRlbi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0
L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGw6IEFkZHMgdGhlIHR5cGVDaGFyYWN0ZXIg
SlMgaW50ZXJmYWNlLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxl
cjo6c2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENv
bnRyb2xsZXI6OmRpZFNob3dLZXlib2FyZENhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VUlTY3Jp
cHRDb250cm9sbGVyOjpzZXREaWRIaWRlS2V5Ym9hcmRDYWxsYmFjayk6CisgICAgICAgIChXVFI6
OlVJU2NyaXB0Q29udHJvbGxlcjo6ZGlkSGlkZUtleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9h
cmQpOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hv
d0tleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnBs
YXRmb3JtRGlkSGlkZUtleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbToKKyAgICAgICAgKC1bVGVz
dFJ1bm5lcldLV2ViVmlldyBpbml0V2l0aEZyYW1lOmNvbmZpZ3VyYXRpb246XSk6IFJlZ2lzdGVy
cyB0aGUgVGVzdFJ1bm5lcldLV2ViVmlldyB0byBsaXN0ZW4gdG8KKyAgICAgICAgICAgICAgICB0
aGUgbm90aWZpY2F0aW9ucyB0aGF0IHRoZSBrZXlib2FyZCBoYXMgYmVlbiByYWlzZWQgb3IgbG93
ZXJlZC4KKyAgICAgICAgKC1bVGVzdFJ1bm5lcldLV2ViVmlldyBfa2V5Ym9hcmREaWRTaG93Ol0p
OgorICAgICAgICAoLVtUZXN0UnVubmVyV0tXZWJWaWV3IF9rZXlib2FyZERpZEhpZGU6XSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tOgorICAgICAgICAo
LVtISURFdmVudEdlbmVyYXRvciBfc2VuZElPSElES2V5Ym9hcmRFdmVudDp1c2FnZTppc0tleURv
d246XSk6IEhlbHBlciB0byBzZW5kIGEgSElEIGtleWJvYXJkIGV2ZW50LgorICAgICAgICAoc2hv
dWxkV3JhcFdpdGhTaGlmdEtleUV2ZW50Rm9yQ2hhcmFjdGVyKTogSGVscGVyIHVzZWQgdG8gZ2Vu
ZXJhdGUga2V5IGV2ZW50cy4KKyAgICAgICAgKGhpZFVzYWdlQ29kZUZvckNoYXJhY3Rlcik6IERp
dHRvLgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBrZXlEb3duOmNvbXBsZXRpb25CbG9j
azpdKTogU3ludGhlc2l6ZXMgYW5kIHNlbmRzIEhJREtleWJvYXJkRXZlbnRzLCB0cmlnZ2VyaW5n
CisgICAgICAgICAgICAgICAgYSBrZXlEb3duIGV2ZW50IGluIFdlYktpdC4KKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL2lvcy9JT0tpdFNQSS5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VUlTY3JpcHRD
b250cm9sbGVyOjp0eXBlQ2hhcmFjdGVyKTogSW1wbGVtZW50cyB0aGUgdHlwZUNoYXJhY3RlciBK
UyBpbnRlcmZhY2UuCisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxlcjo6cGxhdGZvcm1T
ZXREaWRTaG93S2V5Ym9hcmRDYWxsYmFjayk6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJv
bGxlcjo6cGxhdGZvcm1TZXREaWRIaWRlS2V5Ym9hcmRDYWxsYmFjayk6CisKIDIwMTUtMDktMjkg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10g
QWxsb3cgdGVzdHMgdG8gZ2VuZXJhdGUgdXNlciBnZXN0dXJlcyBmb3IgVUkgdGVzdGluZwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvQmluZGluZ3Mv
VUlTY3JpcHRDb250cm9sbGVyLmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRD
b250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKaW5kZXggZDA4MDkyMzEwMThj
MTlhNTk2MzJlOTYwMzE1ZTRlMWM4ZDZmZmVmNi4uZjEzMDlmNjJlOTI1MWQ1NjdiNTkxNDZmNGZk
MWY2OTY3MzUwZGVmZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlw
dENvbnRleHQvQmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIu
aWRsCkBAIC0zNSw2ICszNSwxMSBAQCBpbnRlcmZhY2UgVUlTY3JpcHRDb250cm9sbGVyIHsKICAg
ICB2b2lkIHNpbmdsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIG9iamVjdCBjYWxsYmFjayk7
CiAgICAgdm9pZCBkb3VibGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBvYmplY3QgY2FsbGJh
Y2spOwogCisgICAgdm9pZCB0eXBlQ2hhcmFjdGVyVXNpbmdIYXJkd2FyZUtleWJvYXJkKERPTVN0
cmluZyBjaGFyYWN0ZXIsIG9iamVjdCBjYWxsYmFjayk7CisKKyAgICBhdHRyaWJ1dGUgb2JqZWN0
IGRpZFNob3dLZXlib2FyZENhbGxiYWNrOworICAgIGF0dHJpYnV0ZSBvYmplY3QgZGlkSGlkZUtl
eWJvYXJkQ2FsbGJhY2s7CisKICAgICBhdHRyaWJ1dGUgb2JqZWN0IHdpbGxCZWdpblpvb21pbmdD
YWxsYmFjazsKICAgICBhdHRyaWJ1dGUgb2JqZWN0IGRpZEVuZFpvb21pbmdDYWxsYmFjazsKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggYzYxYzI2ZTllYjE3YTE3MTYwNmJhMTQ3OTRj
ZGU3MjI5YTZkMWVhOS4uNWNlZThmNmMyOGFkYzE2ZDg0ZjlhNWJhYmY3YzA2NTM5NDUyODg3NyAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29u
dGV4dC9VSVNjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC03NSw2ICs3NSwyOCBAQCBKU1ZhbHVlUmVm
IFVJU2NyaXB0Q29udHJvbGxlcjo6ZGlkRW5kWm9vbWluZ0NhbGxiYWNrKCkgY29uc3QKICAgICBy
ZXR1cm4gbV9jb250ZXh0LmNhbGxiYWNrV2l0aElEKG1fZGlkRW5kWm9vbWluZ0NhbGxiYWNrKTsK
IH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldERpZFNob3dLZXlib2FyZENhbGxiYWNr
KEpTVmFsdWVSZWYgY2FsbGJhY2spCit7CisgICAgbV9kaWRTaG93S2V5Ym9hcmRDYWxsYmFjayA9
IG1fY29udGV4dC5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICBwbGF0Zm9ybVNldERp
ZFNob3dLZXlib2FyZENhbGxiYWNrKCk7Cit9CisKK0pTVmFsdWVSZWYgVUlTY3JpcHRDb250cm9s
bGVyOjpkaWRTaG93S2V5Ym9hcmRDYWxsYmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dC5jYWxsYmFja1dpdGhJRChtX2RpZFNob3dLZXlib2FyZENhbGxiYWNrKTsKK30KKwordm9p
ZCBVSVNjcmlwdENvbnRyb2xsZXI6OnNldERpZEhpZGVLZXlib2FyZENhbGxiYWNrKEpTVmFsdWVS
ZWYgY2FsbGJhY2spCit7CisgICAgbV9kaWRIaWRlS2V5Ym9hcmRDYWxsYmFjayA9IG1fY29udGV4
dC5yZWdpc3RlckNhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICBwbGF0Zm9ybVNldERpZEhpZGVLZXli
b2FyZENhbGxiYWNrKCk7Cit9CisKK0pTVmFsdWVSZWYgVUlTY3JpcHRDb250cm9sbGVyOjpkaWRI
aWRlS2V5Ym9hcmRDYWxsYmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dC5jYWxs
YmFja1dpdGhJRChtX2RpZEhpZGVLZXlib2FyZENhbGxiYWNrKTsKK30KKwogI2lmICFQTEFURk9S
TShJT1MpCiB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6em9vbVRvU2NhbGUoZG91YmxlLCBKU1Zh
bHVlUmVmKQogewpAQCAtODgsNiArMTEwLDEwIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpk
b3VibGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBKU1ZhbHVlUmVmKQogewogfQogCit2b2lk
IFVJU2NyaXB0Q29udHJvbGxlcjo6dHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXlib2FyZChK
U1N0cmluZ1JlZiwgSlNWYWx1ZVJlZikKK3sKK30KKwogZG91YmxlIFVJU2NyaXB0Q29udHJvbGxl
cjo6em9vbVNjYWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gMTsKQEAgLTExNSw2ICsxNDEsMTQg
QEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0V2lsbEJlZ2luWm9vbWluZ0Nh
bGxiYWNrKCkKIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpwbGF0Zm9ybVNldERpZEVuZFpvb21p
bmdDYWxsYmFjaygpCiB7CiB9CisKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpwbGF0Zm9ybVNl
dERpZFNob3dLZXlib2FyZENhbGxiYWNrKCkKK3sKK30KKwordm9pZCBVSVNjcmlwdENvbnRyb2xs
ZXI6OnBsYXRmb3JtRGlkSGlkZUtleWJvYXJkQ2FsbGJhY2soKQoreworfQogI2VuZGlmCiAKIHZv
aWQgVUlTY3JpcHRDb250cm9sbGVyOjp1aVNjcmlwdENvbXBsZXRlKEpTU3RyaW5nUmVmIHJlc3Vs
dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0L1VJ
U2NyaXB0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250cm9sbGVyLmgKaW5kZXggMzAzZWRlYjZiNzJlNjM1NTU1NWMwNDk5M2U1
MDAyOGIzNmMzNzM5MS4uNjRlNzAwMTIxZmU4NTA5NDgzZjYxNzQ2MWJmZDA5MGNlOGIwNWVjNCAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRl
eHQvVUlTY3JpcHRDb250cm9sbGVyLmgKQEAgLTQ4LDEyICs0OCwyMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzaW5nbGVUYXBBdFBvaW50KGxvbmcgeCwgbG9uZyB5LCBKU1ZhbHVlUmVmIGNhbGxiYWNr
KTsKICAgICB2b2lkIGRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYg
Y2FsbGJhY2spOwogICAgIAorICAgIHZvaWQgdHlwZUNoYXJhY3RlclVzaW5nSGFyZHdhcmVLZXli
b2FyZChKU1N0cmluZ1JlZiBjaGFyYWN0ZXIsIEpTVmFsdWVSZWYgY2FsbGJhY2spOworCiAgICAg
dm9pZCBzZXRXaWxsQmVnaW5ab29taW5nQ2FsbGJhY2soSlNWYWx1ZVJlZik7CiAgICAgSlNWYWx1
ZVJlZiB3aWxsQmVnaW5ab29taW5nQ2FsbGJhY2soKSBjb25zdDsKIAogICAgIHZvaWQgc2V0RGlk
RW5kWm9vbWluZ0NhbGxiYWNrKEpTVmFsdWVSZWYpOwogICAgIEpTVmFsdWVSZWYgZGlkRW5kWm9v
bWluZ0NhbGxiYWNrKCkgY29uc3Q7CiAKKyAgICB2b2lkIHNldERpZFNob3dLZXlib2FyZENhbGxi
YWNrKEpTVmFsdWVSZWYpOworICAgIEpTVmFsdWVSZWYgZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2so
KSBjb25zdDsKKworICAgIHZvaWQgc2V0RGlkSGlkZUtleWJvYXJkQ2FsbGJhY2soSlNWYWx1ZVJl
Zik7CisgICAgSlNWYWx1ZVJlZiBkaWRIaWRlS2V5Ym9hcmRDYWxsYmFjaygpIGNvbnN0OworCiAg
ICAgZG91YmxlIHpvb21TY2FsZSgpIGNvbnN0OwogICAgIGRvdWJsZSBtaW5pbXVtWm9vbVNjYWxl
KCkgY29uc3Q7CiAgICAgZG91YmxlIG1heGltdW1ab29tU2NhbGUoKSBjb25zdDsKQEAgLTY3LDYg
Kzc1LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHBsYXRmb3JtU2V0V2lsbEJlZ2luWm9v
bWluZ0NhbGxiYWNrKCk7CiAgICAgdm9pZCBwbGF0Zm9ybVNldERpZEVuZFpvb21pbmdDYWxsYmFj
aygpOworICAgIHZvaWQgcGxhdGZvcm1TZXREaWRTaG93S2V5Ym9hcmRDYWxsYmFjaygpOworICAg
IHZvaWQgcGxhdGZvcm1TZXREaWRIaWRlS2V5Ym9hcmRDYWxsYmFjaygpOwogCiAgICAgdmlydHVh
bCBKU0NsYXNzUmVmIHdyYXBwZXJDbGFzcygpIG92ZXJyaWRlOwogCkBAIC03Niw2ICs4Niw4IEBA
IHByaXZhdGU6CiAKICAgICB1bnNpZ25lZCBtX3dpbGxCZWdpblpvb21pbmdDYWxsYmFjayB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX2RpZEVuZFpvb21pbmdDYWxsYmFjayB7IDAgfTsKKyAgICB1bnNp
Z25lZCBtX2RpZFNob3dLZXlib2FyZENhbGxiYWNrIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZGlk
SGlkZUtleWJvYXJkQ2FsbGJhY2sgeyAwIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oCmluZGV4IDNmMTg1OTBhMjIz
YTIzZTllNmZmMWY4YjA4NDAyZTdhOGI3ODVmZTMuLmYyZTQyZTg4YmY5YzljODEyN2RmZTg0YjJi
ZmRjOTAyMGEyMzZkZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdFJ1bm5lcldLV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2Ev
VGVzdFJ1bm5lcldLV2ViVmlldy5oCkBAIC0zMyw5ICszMywxMiBAQAogCiBAcHJvcGVydHkgKG5v
bmF0b21pYywgY29weSkgdm9pZCAoXndpbGxCZWdpblpvb21pbmdDYWxsYmFjaykodm9pZCk7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXmRpZEVuZFpvb21pbmdDYWxsYmFjayko
dm9pZCk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXmRpZFNob3dLZXlib2Fy
ZENhbGxiYWNrKSh2b2lkKTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheZGlk
SGlkZUtleWJvYXJkQ2FsbGJhY2spKHZvaWQpOwogCi0tICh2b2lkKXpvb21Ub1NjYWxlOihkb3Vi
bGUpc2NhbGUgYW5pbWF0ZWQ6KEJPT0wpYW5pbWF0ZWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKHZvaWQpKWNvbXBsZXRpb25IYW5kbGVyOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJh
bWU6KENHUmVjdClmcmFtZSBjb25maWd1cmF0aW9uOihXS1dlYlZpZXdDb25maWd1cmF0aW9uICop
Y29uZmlndXJhdGlvbjsKIAorLSAodm9pZCl6b29tVG9TY2FsZTooZG91YmxlKXNjYWxlIGFuaW1h
dGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21w
bGV0aW9uSGFuZGxlcjsKICNlbmRpZgogCiBAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NvY29hL1Rlc3RSdW5uZXJXS1dlYlZpZXcubW0KaW5kZXggY2M1MzBiMGQyOTk0YzFk
ZDZiOWQ2NzkwNzM0ODk4NDJmMGRlZmNmYi4uMWM0OGE3YjdlNTQzZGNmNWNlZTM2YmY2MjljZWM1
ODY3YTFhYThhOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3Lm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY29jb2EvVGVz
dFJ1bm5lcldLV2ViVmlldy5tbQpAQCAtNDQsNiArNDQsNyBAQCBAZW5kCiAKIEBpbnRlcmZhY2Ug
VGVzdFJ1bm5lcldLV2ViVmlldyAoKQogQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQg
KF56b29tVG9TY2FsZUNvbXBsZXRpb25IYW5kbGVyKSh2b2lkKTsKK0Bwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSB2b2lkIChec2hvd0tleWJvYXJkQ29tcGxldGlvbkhhbmRsZXIpKHZvaWQpOwog
QGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGVzdFJ1bm5lcldLV2ViVmlldwpAQCAtNTcsNiArNTgs
MTYgQEAgLSAodm9pZClkcmFnSW1hZ2U6KE5TSW1hZ2UgKilhbkltYWdlIGF0OihOU1BvaW50KXZp
ZXdMb2NhdGlvbiBvZmZzZXQ6KE5TU2l6ZSlpbmkKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
KQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb25maWd1cmF0
aW9uOihXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbgoreworICAgIGlmIChz
ZWxmID0gW3N1cGVyIGluaXRXaXRoRnJhbWU6ZnJhbWUgY29uZmlndXJhdGlvbjpjb25maWd1cmF0
aW9uXSkgeworICAgICAgICBOU05vdGlmaWNhdGlvbkNlbnRlciogY2VudGVyID0gW05TTm90aWZp
Y2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdOworICAgICAgICBbY2VudGVyIGFkZE9ic2VydmVy
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9rZXlib2FyZERpZFNob3c6KSBuYW1lOlVJS2V5Ym9h
cmREaWRTaG93Tm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgICAgICBbY2VudGVyIGFkZE9i
c2VydmVyOnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKF9rZXlib2FyZERpZEhpZGU6KSBuYW1lOlVJ
S2V5Ym9hcmREaWRIaWRlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOworICAgIH0KKyAgICByZXR1
cm4gc2VsZjsKK30KKwogLSAodm9pZCl6b29tVG9TY2FsZTooZG91YmxlKXNjYWxlIGFuaW1hdGVk
OihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0
aW9uSGFuZGxlcgogewogICAgIEFTU0VSVCghc2VsZi56b29tVG9TY2FsZUNvbXBsZXRpb25IYW5k
bGVyKTsKQEAgLTY1LDYgKzc2LDE4IEBAIC0gKHZvaWQpem9vbVRvU2NhbGU6KGRvdWJsZSlzY2Fs
ZSBhbmltYXRlZDooQk9PTClhbmltYXRlZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pCiAgICAgW3Nl
bGYuc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6c2NhbGUgYW5pbWF0ZWQ6YW5pbWF0ZWRdOwogfQog
CistICh2b2lkKV9rZXlib2FyZERpZFNob3c6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9u
Cit7CisgICAgaWYgKHNlbGYuZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2spCisgICAgICAgIHNlbGYu
ZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2soKTsKK30KKworLSAodm9pZClfa2V5Ym9hcmREaWRIaWRl
OihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgoreworICAgIGlmIChzZWxmLmRpZEhpZGVL
ZXlib2FyZENhbGxiYWNrKQorICAgICAgICBzZWxmLmRpZEhpZGVLZXlib2FyZENhbGxiYWNrKCk7
Cit9CisKIC0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpblpvb21pbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcgd2l0aFZpZXc6KG51bGxhYmxlIFVJVmlldyAqKXZpZXcKIHsKICAgICBbc3Vw
ZXIgc2Nyb2xsVmlld1dpbGxCZWdpblpvb21pbmc6c2Nyb2xsVmlldyB3aXRoVmlldzp2aWV3XTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9y
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5oCmluZGV4
IDIxMmIyMTY1MWQyYmY2YzcwNGQ4NjhjNzdmYzgyM2FhNjdmMzRkMTkuLmFmOWJlNmE1N2NhMjU1
MmFkZDg3NjkyNGRkODFkNzBiMjkzNGMzY2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaApAQCAtNTAsNCArNTAsNyBAQAogCiAtICh2b2lkKW1h
cmtlckV2ZW50UmVjZWl2ZWQ6KElPSElERXZlbnRSZWYpZXZlbnQ7CiAKKy8vIEtleWJvYXJkCist
ICh2b2lkKWtleURvd246KE5TU3RyaW5nICopY2hhcmFjdGVyIGNvbXBsZXRpb25CbG9jazoodm9p
ZCAoXikodm9pZCkpY29tcGxldGlvbkJsb2NrOworCiBAZW5kCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tbSBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tCmluZGV4IDJkZGU2YTg0MDFmNjcxODIw
YTNhOWYwN2U3YWY1ODRhMjg5NjRjOGEuLjYyMGYwNzhhNTM2MmU2NGZjMjAyMGM5MmI4Y2U3NWNh
ZTI3NDZlNzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50
R2VuZXJhdG9yLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2Vu
ZXJhdG9yLm1tCkBAIC0xMjksNiArMTI5LDE3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0CiAgICAg
cmV0dXJuIHNlbGY7CiB9CiAKKy0gKHZvaWQpX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6KHVpbnQ2
NF90KXRpbWVzdGFtcCB1c2FnZToodWludDMyX3QpdXNhZ2UgaXNLZXlEb3duOihib29sKWlzS2V5
RG93bgoreworICAgIFJldGFpblB0cjxJT0hJREV2ZW50UmVmPiBldmVudFJlZiA9IGFkb3B0Q0Yo
SU9ISURFdmVudENyZWF0ZUtleWJvYXJkRXZlbnQoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAg
ICAgdGltZXN0YW1wLAorICAgICAgICBrSElEUGFnZV9LZXlib2FyZE9yS2V5cGFkLAorICAgICAg
ICB1c2FnZSwKKyAgICAgICAgaXNLZXlEb3duLAorICAgICAgICBrSU9ISURFdmVudE9wdGlvbk5v
bmUpKTsKKyAgICBbc2VsZiBfc2VuZEhJREV2ZW50OmV2ZW50UmVmLmdldCgpXTsKK30KKwogLSAo
SU9ISURFdmVudFJlZilfY3JlYXRlSU9ISURFdmVudFR5cGU6KEhhbmRFdmVudFR5cGUpZXZlbnRU
eXBlCiB7CiAgICAgQk9PTCBpc1RvdWNoaW5nID0gKGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRUb3Vj
aGVkIHx8IGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRNb3ZlZCB8fCBldmVudFR5cGUgPT0gSGFuZEV2
ZW50Q2hvcmRDaGFuZ2VkKTsKQEAgLTQyOCw0ICs0MzksMTY5IEBAIC0gKHZvaWQpbWFya2VyRXZl
bnRSZWNlaXZlZDooSU9ISURFdmVudFJlZilldmVudAogICAgIH0KIH0KIAorc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZFdyYXBXaXRoU2hpZnRLZXlFdmVudEZvckNoYXJhY3RlcihOU1N0cmluZyAq
a2V5KQoreworICAgIGlmIChrZXkubGVuZ3RoICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpbnQga2V5Q29kZSA9IFtrZXkgY2hhcmFjdGVyQXRJbmRleDowXTsKKyAgICBpZiAoNjUg
PD0ga2V5Q29kZSAmJiBrZXlDb2RlIDw9IDkwKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBz
d2l0Y2ggKGtleUNvZGUpIHsKKyAgICBjYXNlICdgJzoKKyAgICBjYXNlICchJzoKKyAgICBjYXNl
ICdAJzoKKyAgICBjYXNlICcjJzoKKyAgICBjYXNlICckJzoKKyAgICBjYXNlICclJzoKKyAgICBj
YXNlICdeJzoKKyAgICBjYXNlICcmJzoKKyAgICBjYXNlICcqJzoKKyAgICBjYXNlICcoJzoKKyAg
ICBjYXNlICcpJzoKKyAgICBjYXNlICdfJzoKKyAgICBjYXNlICcrJzoKKyAgICBjYXNlICd7JzoK
KyAgICBjYXNlICd9JzoKKyAgICBjYXNlICd8JzoKKyAgICBjYXNlICc6JzoKKyAgICBjYXNlICci
JzoKKyAgICBjYXNlICc8JzoKKyAgICBjYXNlICc+JzoKKyAgICBjYXNlICc/JzoKKyAgICBjYXNl
ICd+JzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIGlubGluZSB1aW50MzJfdCBoaWRVc2FnZUNvZGVGb3JDaGFyYWN0ZXIoTlNTdHJp
bmcgKmtleSkKK3sKKyAgICBjb25zdCBpbnQgdXBwZXJjYXNlQWxwaGFiZXRpY09mZnNldCA9ICdB
JyAtIGtISURVc2FnZV9LZXlib2FyZEE7CisgICAgY29uc3QgaW50IGxvd2VyY2FzZUFscGhhYmV0
aWNPZmZzZXQgPSAnYScgLSBrSElEVXNhZ2VfS2V5Ym9hcmRBOworICAgIGNvbnN0IGludCBudW1l
cmljTm9uWmVyb09mZnNldCA9ICcxJyAtIGtISURVc2FnZV9LZXlib2FyZDE7CisgICAgaWYgKGtl
eS5sZW5ndGggPT0gMSkgeworICAgICAgICAvLyBIYW5kbGUgYWxwaGFudW1lcmljIGNoYXJhY3Rl
cnMgYW5kIGJhc2ljIHN5bWJvbHMuCisgICAgICAgIGludCBrZXlDb2RlID0gW2tleSBjaGFyYWN0
ZXJBdEluZGV4OjBdOworICAgICAgICBpZiAoOTcgPD0ga2V5Q29kZSAmJiBrZXlDb2RlIDw9IDEy
MikgLy8gSGFuZGxlIGEtei4KKyAgICAgICAgICAgIHJldHVybiBrZXlDb2RlIC0gbG93ZXJjYXNl
QWxwaGFiZXRpY09mZnNldDsKKworICAgICAgICBpZiAoNjUgPD0ga2V5Q29kZSAmJiBrZXlDb2Rl
IDw9IDkwKSAvLyBIYW5kbGUgQS1aLgorICAgICAgICAgICAgcmV0dXJuIGtleUNvZGUgLSB1cHBl
cmNhc2VBbHBoYWJldGljT2Zmc2V0OworCisgICAgICAgIGlmICg0OSA8PSBrZXlDb2RlICYmIGtl
eUNvZGUgPD0gNTcpIC8vIEhhbmRsZSAxLTkuCisgICAgICAgICAgICByZXR1cm4ga2V5Q29kZSAt
IG51bWVyaWNOb25aZXJvT2Zmc2V0OworCisgICAgICAgIC8vIEhhbmRsZSBhbGwgb3RoZXIgY2Fz
ZXMuCisgICAgICAgIHN3aXRjaCAoa2V5Q29kZSkgeworICAgICAgICBjYXNlICdgJzoKKyAgICAg
ICAgY2FzZSAnfic6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkR3JhdmVB
Y2NlbnRBbmRUaWxkZTsKKyAgICAgICAgY2FzZSAnISc6CisgICAgICAgICAgICByZXR1cm4ga0hJ
RFVzYWdlX0tleWJvYXJkMTsKKyAgICAgICAgY2FzZSAnQCc6CisgICAgICAgICAgICByZXR1cm4g
a0hJRFVzYWdlX0tleWJvYXJkMjsKKyAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICByZXR1
cm4ga0hJRFVzYWdlX0tleWJvYXJkMzsKKyAgICAgICAgY2FzZSAnJCc6CisgICAgICAgICAgICBy
ZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkNDsKKyAgICAgICAgY2FzZSAnJSc6CisgICAgICAgICAg
ICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkNTsKKyAgICAgICAgY2FzZSAnXic6CisgICAgICAg
ICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkNjsKKyAgICAgICAgY2FzZSAnJic6CisgICAg
ICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkNzsKKyAgICAgICAgY2FzZSAnKic6Cisg
ICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkODsKKyAgICAgICAgY2FzZSAnKCc6
CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkOTsKKyAgICAgICAgY2FzZSAn
KSc6CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXli
b2FyZDA7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICBjYXNlICdfJzoKKyAgICAgICAgICAg
IHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRIeXBoZW47CisgICAgICAgIGNhc2UgJz0nOgorICAg
ICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRFcXVh
bFNpZ247CisgICAgICAgIGNhc2UgJ1x0JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2Vf
S2V5Ym9hcmRUYWI7CisgICAgICAgIGNhc2UgJ1snOgorICAgICAgICBjYXNlICd7JzoKKyAgICAg
ICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRPcGVuQnJhY2tldDsKKyAgICAgICAgY2Fz
ZSAnXSc6CisgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9L
ZXlib2FyZENsb3NlQnJhY2tldDsKKyAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICBjYXNlICd8
JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRCYWNrc2xhc2g7CisgICAg
ICAgIGNhc2UgJzsnOgorICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgIHJldHVybiBrSElE
VXNhZ2VfS2V5Ym9hcmRTZW1pY29sb247CisgICAgICAgIGNhc2UgJ1wnJzoKKyAgICAgICAgY2Fz
ZSAnIic6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkUXVvdGU7CisgICAg
ICAgIGNhc2UgJ1xyJzoKKyAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgcmV0dXJuIGtI
SURVc2FnZV9LZXlib2FyZFJldHVybk9yRW50ZXI7CisgICAgICAgIGNhc2UgJywnOgorICAgICAg
ICBjYXNlICc8JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRDb21tYTsK
KyAgICAgICAgY2FzZSAnLic6CisgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgcmV0dXJu
IGtISURVc2FnZV9LZXlib2FyZFBlcmlvZDsKKyAgICAgICAgY2FzZSAnLyc6CisgICAgICAgIGNh
c2UgJz8nOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFNsYXNoOworICAg
ICAgICBjYXNlICcgJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRTcGFj
ZWJhcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBjb25zdCBpbnQgZnVuY3Rpb25LZXlPZmZzZXQg
PSBrSElEVXNhZ2VfS2V5Ym9hcmRGMTsKKyAgICBmb3IgKGludCBmdW5jdGlvbktleUluZGV4ID0g
MTsgZnVuY3Rpb25LZXlJbmRleCA8PSAxMjsgKytmdW5jdGlvbktleUluZGV4KSB7CisgICAgICAg
IGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkYl
ZCIsIGZ1bmN0aW9uS2V5SW5kZXhdXSkKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbktleU9m
ZnNldCArIGZ1bmN0aW9uS2V5SW5kZXggLSAxOworICAgIH0KKyAgICBpZiAoW2tleSBpc0VxdWFs
VG9TdHJpbmc6QCJlc2NhcGUiXSkKKyAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZEVz
Y2FwZTsKKyAgICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJyZXR1cm4iXSB8fCBba2V5IGlz
RXF1YWxUb1N0cmluZzpAImVudGVyIl0pCisgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9h
cmRSZXR1cm5PckVudGVyOworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRBcnJv
dyJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkTGVmdEFycm93OworICAgIGlm
IChba2V5IGlzRXF1YWxUb1N0cmluZzpAInJpZ2h0QXJyb3ciXSkKKyAgICAgICAgcmV0dXJuIGtI
SURVc2FnZV9LZXlib2FyZFJpZ2h0QXJyb3c7CisgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5n
OkAidXBBcnJvdyJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkVXBBcnJvdzsK
KyAgICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJkb3duQXJyb3ciXSkKKyAgICAgICAgcmV0
dXJuIGtISURVc2FnZV9LZXlib2FyZERvd25BcnJvdzsKKyAgICBpZiAoW2tleSBpc0VxdWFsVG9T
dHJpbmc6QCJkZWxldGUiXSkKKyAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZERlbGV0
ZU9yQmFja3NwYWNlOworICAgIC8vIFRoZSBzaW11bGF0b3Iga2V5Ym9hcmQgaW50ZXJwcmV0cyBi
b3RoIGxlZnQgYW5kIHJpZ2h0IG1vZGlmaWVyIGtleXMgdXNpbmcgdGhlIGxlZnQgdmVyc2lvbiBv
ZiB0aGUgdXNhZ2UgY29kZS4KKyAgICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJsZWZ0Q29u
dHJvbCJdIHx8IFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAicmlnaHRDb250cm9sIl0pCisgICAgICAg
IHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0Q29udHJvbDsKKyAgICBpZiAoW2tleSBpc0Vx
dWFsVG9TdHJpbmc6QCJsZWZ0U2hpZnQiXSB8fCBba2V5IGlzRXF1YWxUb1N0cmluZzpAInJpZ2h0
U2hpZnQiXSkKKyAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZExlZnRTaGlmdDsKKyAg
ICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJsZWZ0QWx0Il0gfHwgW2tleSBpc0VxdWFsVG9T
dHJpbmc6QCJyaWdodEFsdCJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkTGVm
dEFsdDsKKworICAgIHJldHVybiAwOworfQorCistICh2b2lkKWtleURvd246KE5TU3RyaW5nICop
Y2hhcmFjdGVyIGNvbXBsZXRpb25CbG9jazoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkJsb2Nr
Cit7CisgICAgYm9vbCBzaG91bGRXcmFwV2l0aFNoaWZ0ID0gc2hvdWxkV3JhcFdpdGhTaGlmdEtl
eUV2ZW50Rm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgdWludDMyX3QgdXNhZ2UgPSBoaWRV
c2FnZUNvZGVGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICB1aW50NjRfdCBhYnNvbHV0ZU1h
Y2hUaW1lID0gbWFjaF9hYnNvbHV0ZV90aW1lKCk7CisKKyAgICBpZiAoc2hvdWxkV3JhcFdpdGhT
aGlmdCkKKyAgICAgICAgW3NlbGYgX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6YWJzb2x1dGVNYWNo
VGltZSB1c2FnZTprSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0U2hpZnQgaXNLZXlEb3duOnRydWVdOwor
CisgICAgW3NlbGYgX3NlbmRJT0hJREtleWJvYXJkRXZlbnQ6YWJzb2x1dGVNYWNoVGltZSB1c2Fn
ZTp1c2FnZSBpc0tleURvd246dHJ1ZV07CisgICAgW3NlbGYgX3NlbmRJT0hJREtleWJvYXJkRXZl
bnQ6YWJzb2x1dGVNYWNoVGltZSB1c2FnZTp1c2FnZSBpc0tleURvd246ZmFsc2VdOworCisgICAg
aWYgKHNob3VsZFdyYXBXaXRoU2hpZnQpCisgICAgICAgIFtzZWxmIF9zZW5kSU9ISURLZXlib2Fy
ZEV2ZW50OmFic29sdXRlTWFjaFRpbWUgdXNhZ2U6a0hJRFVzYWdlX0tleWJvYXJkTGVmdFNoaWZ0
IGlzS2V5RG93bjpmYWxzZV07CisKKyAgICBbc2VsZiBfc2VuZE1hcmtlckhJREV2ZW50V2l0aENv
bXBsZXRpb25CbG9jazpjb21wbGV0aW9uQmxvY2tdOworfQorCiBAZW5kCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9JT0tpdFNQSS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvSU9LaXRTUEkuaAppbmRleCAxZTkwMmNjMTg1MmNlOTBjMGQ0N2RkNzM5YWM0YTI4
MjFmZDQxMThlLi4zYTA1NGM3MGQ2YjkzNjcxMTg3ZjMzM2RlZDFkMzY2YzIyMWYxZmQxIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9JT0tpdFNQSS5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL0lPS2l0U1BJLmgKQEAgLTEyNyw2ICsxMjcsNTEgQEAgSU9I
SURFdmVudFN5c3RlbUNsaWVudFJlZiBJT0hJREV2ZW50U3lzdGVtQ2xpZW50Q3JlYXRlKENGQWxs
b2NhdG9yUmVmKTsKICNkZWZpbmUga0dTRXZlbnRQYXRoSW5mb0luUmFuZ2UgKDEgPDwgMCkKICNk
ZWZpbmUga0dTRXZlbnRQYXRoSW5mb0luVG91Y2ggKDEgPDwgMSkKIAorZW51bSB7CisgICAga0hJ
RFBhZ2VfS2V5Ym9hcmRPcktleXBhZCA9IDB4MDcKK307CisKK2VudW0geworICAgIGtISURVc2Fn
ZV9LZXlib2FyZEEgPSAweDA0LAorICAgIGtISURVc2FnZV9LZXlib2FyZDEgPSAweDFFLAorICAg
IGtISURVc2FnZV9LZXlib2FyZDIgPSAweDFGLAorICAgIGtISURVc2FnZV9LZXlib2FyZDMgPSAw
eDIwLAorICAgIGtISURVc2FnZV9LZXlib2FyZDQgPSAweDIxLAorICAgIGtISURVc2FnZV9LZXli
b2FyZDUgPSAweDIyLAorICAgIGtISURVc2FnZV9LZXlib2FyZDYgPSAweDIzLAorICAgIGtISURV
c2FnZV9LZXlib2FyZDcgPSAweDI0LAorICAgIGtISURVc2FnZV9LZXlib2FyZDggPSAweDI1LAor
ICAgIGtISURVc2FnZV9LZXlib2FyZDkgPSAweDI2LAorICAgIGtISURVc2FnZV9LZXlib2FyZDAg
PSAweDI3LAorICAgIGtISURVc2FnZV9LZXlib2FyZFJldHVybk9yRW50ZXIgPSAweDI4LAorICAg
IGtISURVc2FnZV9LZXlib2FyZEVzY2FwZSA9IDB4MjksCisgICAga0hJRFVzYWdlX0tleWJvYXJk
RGVsZXRlT3JCYWNrc3BhY2UgPSAweDJBLAorICAgIGtISURVc2FnZV9LZXlib2FyZFRhYiA9IDB4
MkIsCisgICAga0hJRFVzYWdlX0tleWJvYXJkU3BhY2ViYXIgPSAweDJDLAorICAgIGtISURVc2Fn
ZV9LZXlib2FyZEh5cGhlbiA9IDB4MkQsCisgICAga0hJRFVzYWdlX0tleWJvYXJkRXF1YWxTaWdu
ID0gMHgyRSwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRPcGVuQnJhY2tldCA9IDB4MkYsCisgICAg
a0hJRFVzYWdlX0tleWJvYXJkQ2xvc2VCcmFja2V0ID0gMHgzMCwKKyAgICBrSElEVXNhZ2VfS2V5
Ym9hcmRCYWNrc2xhc2ggPSAweDMxLAorICAgIGtISURVc2FnZV9LZXlib2FyZFNlbWljb2xvbiA9
IDB4MzMsCisgICAga0hJRFVzYWdlX0tleWJvYXJkUXVvdGUgPSAweDM0LAorICAgIGtISURVc2Fn
ZV9LZXlib2FyZEdyYXZlQWNjZW50QW5kVGlsZGUgPSAweDM1LAorICAgIGtISURVc2FnZV9LZXli
b2FyZENvbW1hID0gMHgzNiwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRQZXJpb2QgPSAweDM3LAor
ICAgIGtISURVc2FnZV9LZXlib2FyZFNsYXNoID0gMHgzOCwKKyAgICBrSElEVXNhZ2VfS2V5Ym9h
cmRGMSA9IDB4M0EsCisgICAga0hJRFVzYWdlX0tleWJvYXJkSG9tZSA9IDB4NEEsCisgICAga0hJ
RFVzYWdlX0tleWJvYXJkUGFnZVVwID0gMHg0QiwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRFbmQg
PSAweDRELAorICAgIGtISURVc2FnZV9LZXlib2FyZFJpZ2h0QXJyb3cgPSAweDRGLAorICAgIGtI
SURVc2FnZV9LZXlib2FyZExlZnRBcnJvdyA9IDB4NTAsCisgICAga0hJRFVzYWdlX0tleWJvYXJk
RG93bkFycm93ID0gMHg1MSwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRVcEFycm93ID0gMHg1MiwK
KyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0Q29udHJvbCA9IDB4RTAsCisgICAga0hJRFVzYWdl
X0tleWJvYXJkTGVmdFNoaWZ0ID0gMHhFMSwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0QWx0
ID0gMHhFMgorfTsKKwogV1RGX0VYVEVSTl9DX0VORAogCiAjZW5kaWYgLy8gVVNFKEFQUExFX0lO
VEVSTkFMX1NESykKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2Ny
aXB0Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0
Q29udHJvbGxlcklPUy5tbQppbmRleCA4YTg2NDg2MmI3NzhlYTNlNTU1ZmRkZjMyOGVlMzY1YzA2
ZjNjY2E4Li5lYjFiZjEyM2ZjMTg4NjgyZGQyOGEwZmRhZTlmNGFiNzYwZmEwZGQ0IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250cm9sbGVySU9TLm1t
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbXBvcnQgIkhJREV2ZW50R2VuZXJhdG9yLmgiCiAjaW1w
b3J0ICJQbGF0Zm9ybVdlYlZpZXcuaCIKKyNpbXBvcnQgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2lt
cG9ydCAiVGVzdENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIK
ICNpbXBvcnQgIlVJU2NyaXB0Q29udGV4dC5oIgpAQCAtOTIsNiArOTMsMTYgQEAgdm9pZCBVSVNj
cmlwdENvbnRyb2xsZXI6OmRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVS
ZWYgY2FsbGJhY2spCiAgICAgfV07CiB9CiAKK3ZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp0eXBl
Q2hhcmFjdGVyVXNpbmdIYXJkd2FyZUtleWJvYXJkKEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNW
YWx1ZVJlZiBjYWxsYmFjaykKK3sKKyAgICB1bnNpZ25lZCBjYWxsYmFja0lEID0gbV9jb250ZXh0
LnByZXBhcmVGb3JBc3luY1Rhc2soY2FsbGJhY2spOworCisgICAgLy8gQXNzdW1lcyB0aGF0IHRo
ZSBrZXlib2FyZCBpcyBhbHJlYWR5IHNob3duLgorICAgIFtbSElERXZlbnRHZW5lcmF0b3Igc2hh
cmVkSElERXZlbnRHZW5lcmF0b3JdIGtleURvd246dG9XVEZTdHJpbmcodG9XSyhjaGFyYWN0ZXIp
KSBjb21wbGV0aW9uQmxvY2s6XnsKKyAgICAgICAgbV9jb250ZXh0LmFzeW5jVGFza0NvbXBsZXRl
KGNhbGxiYWNrSUQpOworICAgIH1dOworfQorCiBkb3VibGUgVUlTY3JpcHRDb250cm9sbGVyOjpt
aW5pbXVtWm9vbVNjYWxlKCkgY29uc3QKIHsKICAgICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJW
aWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
VmlldygpOwpAQCAtMTMwLDYgKzE0MSwyMiBAQCB2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6cGxh
dGZvcm1TZXREaWRFbmRab29taW5nQ2FsbGJhY2soKQogICAgIH07CiB9CiAKK3ZvaWQgVUlTY3Jp
cHRDb250cm9sbGVyOjpwbGF0Zm9ybVNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKCkKK3sKKyAg
ICBUZXN0UnVubmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOworICAgIHdlYlZpZXcuZGlkU2hvd0tl
eWJvYXJkQ2FsbGJhY2sgPSBeeworICAgICAgICBtX2NvbnRleHQuZmlyZUNhbGxiYWNrKG1fZGlk
U2hvd0tleWJvYXJkQ2FsbGJhY2spOworICAgIH07Cit9CisKK3ZvaWQgVUlTY3JpcHRDb250cm9s
bGVyOjpwbGF0Zm9ybVNldERpZEhpZGVLZXlib2FyZENhbGxiYWNrKCkKK3sKKyAgICBUZXN0UnVu
bmVyV0tXZWJWaWV3ICp3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOworICAgIHdlYlZpZXcuZGlkSGlkZUtleWJvYXJkQ2Fs
bGJhY2sgPSBeeworICAgICAgICBtX2NvbnRleHQuZmlyZUNhbGxiYWNrKG1fZGlkSGlkZUtleWJv
YXJkQ2FsbGJhY2spOworICAgIH07Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0MzEyNmVlMzYxOTU4YTdmMWM1MTA3NTc4ZTQ3Y2NkMDJhYWFmYTEyLi40ZGZhNTU0
ZjBiMWE3ZjhhNGMzMmRmNzc3MmFkZjEwOGNkMDM5OGQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTUtMDktMzAgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IGtleWJvYXJkIGV2ZW50IHNlbmRpbmcgZm9yIGlPUyBpbiBXZWJLaXRU
ZXN0UnVubmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDk2NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRzIGEgbmV3IGJhc2ljIHRlc3QgZm9yIHRoZSBvbmlucHV0IGV2ZW50IGxpc3RlbmVyIHdo
ZW4gdHlwaW5nIGluIGEgdGV4dCBmaWVsZC4KKworICAgICAgICAqIGZhc3QvZXZlbnRzL2lvcy9p
bnB1dC12YWx1ZS1hZnRlci1vbmlucHV0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9ldmVudHMvaW9zL2lucHV0LXZhbHVlLWFmdGVyLW9uaW5wdXQuaHRtbDogQWRkZWQuCisK
IDIwMTUtMDktMjkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgW2lPU10gQWxsb3cgdGVzdHMgdG8gZ2VuZXJhdGUgdXNlciBnZXN0dXJlcyBmb3IgVUkg
dGVzdGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL2lucHV0LXZh
bHVlLWFmdGVyLW9uaW5wdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
aW9zL2lucHV0LXZhbHVlLWFmdGVyLW9uaW5wdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRk
YmJmNGI0ODE2YTlhYmJiMjM5ZDkxOThlZWY2ZTUzZGY4NDM2MWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyIEBACisKK1N1Y2Nlc3NmdWxseSBoYW5kbGVkIG9uaW5w
dXQsIHZhbHVlIGlzIG5vdyAiYSIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4Nzc5
OTNhNmM3YmJjYzM1NDk4Zjk0MzFlNmUzNDYzYTFlZDdhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC5odG1s
CkBAIC0wLDAgKzEsNDYgQEAKKzxodG1sPgorCis8aGVhZD4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3
cG9ydCIgY29udGVudD0iaW5pdGlhbC1zY2FsZT0xLjAiPgorICAgIDxzY3JpcHQgaWQ9InVpLXNj
cmlwdCIgdHlwZT0idGV4dC9wbGFpbiI+CisgICAgICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHVpQ29udHJvbGxlci5zaW5nbGVUYXBBdFBvaW50KDUwLCAyNSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLmRpZFNob3dLZXlib2FyZENhbGxiYWNrID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHVpQ29udHJvbGxlci50eXBlQ2hhcmFjdGVy
VXNpbmdIYXJkd2FyZUtleWJvYXJkKCJhIiwgZnVuY3Rpb24oKSB7IH0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9KSgpOworICAgIDwvc2NyaXB0PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgICAg
ICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIud2FpdFVu
dGlsRG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0VUlTY3JpcHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVp
LXNjcmlwdCIpLnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVWYWx1
ZUNoYW5nZWQodmFsdWUpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikudGV4dENvbnRlbnQgPSAiU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgb25pbnB1dCwgdmFs
dWUgaXMgbm93IFwiIiArIHZhbHVlICsgIlwiIjsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90
aWZ5RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIgfHwgIXRlc3RSdW5uZXIu
cnVuVUlTY3JpcHQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICB0ZXN0
UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1bmN0aW9uKHJlc3VsdCkgeyB9KTsK
KyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBzdHlsZT0ibWFyZ2lu
OiAwOyIgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDxpbnB1dCBzdHlsZT0id2lkdGg6IDEwMHB4
OyBoZWlnaHQ6IDUwcHg7IiBpZD0idGVzdC1pbnB1dCIgb25pbnB1dD0iaGFuZGxlVmFsdWVDaGFu
Z2VkKHRoaXMudmFsdWUpIj4KKzxkaXYgaWQ9ImNvbnNvbGUiPkZhaWxlZCB0byBoYW5kbGUgb25p
bnB1dDxkaXY+Cis8L2JvZHk+CisKKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262232</attachid>
            <date>2015-09-30 22:12:09 -0700</date>
            <delta_ts>2015-09-30 22:57:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149676-20150930221143.patch</filename>
            <type>text/plain</type>
            <size>23909</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwMzY4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzRkNDcwZGE2Mjk0MjQwYjAyODJhMjg0NTkzOTBhNTQy
NTBjOWY5Mi4uZWI0N2VkMWQ3Yzk4MjNiYTBkNDQ4MjliNzdjNWM1MzA4ODMxY2EwNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQw
IEBACisyMDE1LTA5LTMwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBrZXlib2FyZCBldmVudCBzZW5kaW5nIGZvciBpT1MgaW4gV2Vi
S2l0VGVzdFJ1bm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ5Njc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkcyBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIGFuZCBzZW5kaW5nIGtleSBldmVudHMg
aW4gV2ViS2l0VGVzdFJ1bm5lci4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgaW4gYSBzaW1pbGFyCisg
ICAgICAgIHdheSBhcyB0b3VjaCBldmVudHMsIHVzaW5nIElPSElERXZlbnQgbWFjaGluZXJ5LiBB
bHNvIGFkZHMgY2FsbGJhY2tzIHRvIHRoZSBVSVNjcmlwdENvbnRyb2xsZXIgSlMgQVBJIHRoYXQK
KyAgICAgICAgYWxsb3dzIHVzIHRvIHJ1biBjb2RlIHdoZW4gdGhlIGtleWJvYXJkIGlzIHNob3du
IG9yIGhpZGRlbi4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0
L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGw6IEFkZHMgdGhlIHR5cGVDaGFyYWN0ZXIg
SlMgaW50ZXJmYWNlLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0
L1VJU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlVJU2NyaXB0Q29udHJvbGxl
cjo6c2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENv
bnRyb2xsZXI6OmRpZFNob3dLZXlib2FyZENhbGxiYWNrKToKKyAgICAgICAgKFdUUjo6VUlTY3Jp
cHRDb250cm9sbGVyOjpzZXREaWRIaWRlS2V5Ym9hcmRDYWxsYmFjayk6CisgICAgICAgIChXVFI6
OlVJU2NyaXB0Q29udHJvbGxlcjo6ZGlkSGlkZUtleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAo
V1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9h
cmQpOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hv
d0tleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpVSVNjcmlwdENvbnRyb2xsZXI6OnBs
YXRmb3JtU2V0RGlkSGlkZUtleWJvYXJkQ2FsbGJhY2spOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVUlTY3JpcHRDb250ZXh0L1VJU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbToKKyAgICAgICAgKC1b
VGVzdFJ1bm5lcldLV2ViVmlldyBpbml0V2l0aEZyYW1lOmNvbmZpZ3VyYXRpb246XSk6IFJlZ2lz
dGVycyB0aGUgVGVzdFJ1bm5lcldLV2ViVmlldyB0byBsaXN0ZW4gdG8KKyAgICAgICAgICAgICAg
ICB0aGUgbm90aWZpY2F0aW9ucyB0aGF0IHRoZSBrZXlib2FyZCBoYXMgYmVlbiByYWlzZWQgb3Ig
bG93ZXJlZC4KKyAgICAgICAgKC1bVGVzdFJ1bm5lcldLV2ViVmlldyBfa2V5Ym9hcmREaWRTaG93
Ol0pOgorICAgICAgICAoLVtUZXN0UnVubmVyV0tXZWJWaWV3IF9rZXlib2FyZERpZEhpZGU6XSk6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9ISURFdmVudEdlbmVyYXRvci5tOgorICAgICAg
ICAoLVtISURFdmVudEdlbmVyYXRvciBfc2VuZElPSElES2V5Ym9hcmRFdmVudDp1c2FnZTppc0tl
eURvd246XSk6IEhlbHBlciB0byBzZW5kIGEgSElEIGtleWJvYXJkIGV2ZW50LgorICAgICAgICAo
c2hvdWxkV3JhcFdpdGhTaGlmdEtleUV2ZW50Rm9yQ2hhcmFjdGVyKTogSGVscGVyIHVzZWQgdG8g
Z2VuZXJhdGUga2V5IGV2ZW50cy4KKyAgICAgICAgKGhpZFVzYWdlQ29kZUZvckNoYXJhY3Rlcik6
IERpdHRvLgorICAgICAgICAoLVtISURFdmVudEdlbmVyYXRvciBrZXlEb3duOmNvbXBsZXRpb25C
bG9jazpdKTogU3ludGhlc2l6ZXMgYW5kIHNlbmRzIEhJREtleWJvYXJkRXZlbnRzLCB0cmlnZ2Vy
aW5nCisgICAgICAgICAgICAgICAgYSBrZXlEb3duIGV2ZW50IGluIFdlYktpdC4KKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL2lvcy9JT0tpdFNQSS5oOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbToKKwogMjAxNS0wOS0yOSAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBBbGxvdyB0
ZXN0cyB0byBnZW5lcmF0ZSB1c2VyIGdlc3R1cmVzIGZvciBVSSB0ZXN0aW5nCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9CaW5kaW5ncy9VSVNjcmlw
dENvbnRyb2xsZXIuaWRsIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQv
QmluZGluZ3MvVUlTY3JpcHRDb250cm9sbGVyLmlkbAppbmRleCBkMDgwOTIzMTAxOGMxOWE1OTYz
MmU5NjAzMTVlNGUxYzhkNmZmZWY2Li5mMTMwOWY2MmU5MjUxZDU2N2I1OTE0NmY0ZmQxZjY5Njcz
NTBkZWZlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4
dC9CaW5kaW5ncy9VSVNjcmlwdENvbnRyb2xsZXIuaWRsCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVUlTY3JpcHRDb250ZXh0L0JpbmRpbmdzL1VJU2NyaXB0Q29udHJvbGxlci5pZGwKQEAg
LTM1LDYgKzM1LDExIEBAIGludGVyZmFjZSBVSVNjcmlwdENvbnRyb2xsZXIgewogICAgIHZvaWQg
c2luZ2xlVGFwQXRQb2ludChsb25nIHgsIGxvbmcgeSwgb2JqZWN0IGNhbGxiYWNrKTsKICAgICB2
b2lkIGRvdWJsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIG9iamVjdCBjYWxsYmFjayk7CiAK
KyAgICB2b2lkIHR5cGVDaGFyYWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoRE9NU3RyaW5nIGNo
YXJhY3Rlciwgb2JqZWN0IGNhbGxiYWNrKTsKKworICAgIGF0dHJpYnV0ZSBvYmplY3QgZGlkU2hv
d0tleWJvYXJkQ2FsbGJhY2s7CisgICAgYXR0cmlidXRlIG9iamVjdCBkaWRIaWRlS2V5Ym9hcmRD
YWxsYmFjazsKKwogICAgIGF0dHJpYnV0ZSBvYmplY3Qgd2lsbEJlZ2luWm9vbWluZ0NhbGxiYWNr
OwogICAgIGF0dHJpYnV0ZSBvYmplY3QgZGlkRW5kWm9vbWluZ0NhbGxiYWNrOwogCmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRy
b2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmNwcAppbmRleCBjNjFjMjZlOWViMTdhMTcxNjA2YmExNDc5NGNkZTcyMjlh
NmQxZWE5Li45Y2NkOWYzMjIyMTc0ZWU3OTUzMDQxZWE1Nzc3N2U3Yjg2ZWE5ZWQwIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENvbnRy
b2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVUlTY3JpcHRDb250ZXh0L1VJ
U2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTc1LDYgKzc1LDI4IEBAIEpTVmFsdWVSZWYgVUlTY3Jp
cHRDb250cm9sbGVyOjpkaWRFbmRab29taW5nQ2FsbGJhY2soKSBjb25zdAogICAgIHJldHVybiBt
X2NvbnRleHQuY2FsbGJhY2tXaXRoSUQobV9kaWRFbmRab29taW5nQ2FsbGJhY2spOwogfQogCit2
b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6c2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2soSlNWYWx1
ZVJlZiBjYWxsYmFjaykKK3sKKyAgICBtX2RpZFNob3dLZXlib2FyZENhbGxiYWNrID0gbV9jb250
ZXh0LnJlZ2lzdGVyQ2FsbGJhY2soY2FsbGJhY2spOworICAgIHBsYXRmb3JtU2V0RGlkU2hvd0tl
eWJvYXJkQ2FsbGJhY2soKTsKK30KKworSlNWYWx1ZVJlZiBVSVNjcmlwdENvbnRyb2xsZXI6OmRp
ZFNob3dLZXlib2FyZENhbGxiYWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNh
bGxiYWNrV2l0aElEKG1fZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2spOworfQorCit2b2lkIFVJU2Ny
aXB0Q29udHJvbGxlcjo6c2V0RGlkSGlkZUtleWJvYXJkQ2FsbGJhY2soSlNWYWx1ZVJlZiBjYWxs
YmFjaykKK3sKKyAgICBtX2RpZEhpZGVLZXlib2FyZENhbGxiYWNrID0gbV9jb250ZXh0LnJlZ2lz
dGVyQ2FsbGJhY2soY2FsbGJhY2spOworICAgIHBsYXRmb3JtU2V0RGlkSGlkZUtleWJvYXJkQ2Fs
bGJhY2soKTsKK30KKworSlNWYWx1ZVJlZiBVSVNjcmlwdENvbnRyb2xsZXI6OmRpZEhpZGVLZXli
b2FyZENhbGxiYWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LmNhbGxiYWNrV2l0
aElEKG1fZGlkSGlkZUtleWJvYXJkQ2FsbGJhY2spOworfQorCiAjaWYgIVBMQVRGT1JNKElPUykK
IHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjp6b29tVG9TY2FsZShkb3VibGUsIEpTVmFsdWVSZWYp
CiB7CkBAIC04OCw2ICsxMTAsMTAgQEAgdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OmRvdWJsZVRh
cEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYpCiB7CiB9CiAKK3ZvaWQgVUlTY3Jp
cHRDb250cm9sbGVyOjp0eXBlQ2hhcmFjdGVyVXNpbmdIYXJkd2FyZUtleWJvYXJkKEpTU3RyaW5n
UmVmLCBKU1ZhbHVlUmVmKQoreworfQorCiBkb3VibGUgVUlTY3JpcHRDb250cm9sbGVyOjp6b29t
U2NhbGUoKSBjb25zdAogewogICAgIHJldHVybiAxOwpAQCAtMTE1LDYgKzE0MSwxNCBAQCB2b2lk
IFVJU2NyaXB0Q29udHJvbGxlcjo6cGxhdGZvcm1TZXRXaWxsQmVnaW5ab29taW5nQ2FsbGJhY2so
KQogdm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkRW5kWm9vbWluZ0NhbGxi
YWNrKCkKIHsKIH0KKwordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hv
d0tleWJvYXJkQ2FsbGJhY2soKQoreworfQorCit2b2lkIFVJU2NyaXB0Q29udHJvbGxlcjo6cGxh
dGZvcm1TZXREaWRIaWRlS2V5Ym9hcmRDYWxsYmFjaygpCit7Cit9CiAjZW5kaWYKIAogdm9pZCBV
SVNjcmlwdENvbnRyb2xsZXI6OnVpU2NyaXB0Q29tcGxldGUoSlNTdHJpbmdSZWYgcmVzdWx0KQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9VSVNjcmlwdENvbnRleHQvVUlTY3Jp
cHRDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaAppbmRleCAzMDNlZGViNmI3MmU2MzU1NTU1YzA0OTkzZTUwMDI4
YjM2YzM3MzkxLi42NGU3MDAxMjFmZTg1MDk0ODNmNjE3NDYxYmZkMDkwY2U4YjA1ZWM0IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9VSVNjcmlwdENv
bnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1VJU2NyaXB0Q29udGV4dC9V
SVNjcmlwdENvbnRyb2xsZXIuaApAQCAtNDgsMTIgKzQ4LDIwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNpbmdsZVRhcEF0UG9pbnQobG9uZyB4LCBsb25nIHksIEpTVmFsdWVSZWYgY2FsbGJhY2spOwog
ICAgIHZvaWQgZG91YmxlVGFwQXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBjYWxs
YmFjayk7CiAgICAgCisgICAgdm9pZCB0eXBlQ2hhcmFjdGVyVXNpbmdIYXJkd2FyZUtleWJvYXJk
KEpTU3RyaW5nUmVmIGNoYXJhY3RlciwgSlNWYWx1ZVJlZiBjYWxsYmFjayk7CisKICAgICB2b2lk
IHNldFdpbGxCZWdpblpvb21pbmdDYWxsYmFjayhKU1ZhbHVlUmVmKTsKICAgICBKU1ZhbHVlUmVm
IHdpbGxCZWdpblpvb21pbmdDYWxsYmFjaygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXREaWRFbmRa
b29taW5nQ2FsbGJhY2soSlNWYWx1ZVJlZik7CiAgICAgSlNWYWx1ZVJlZiBkaWRFbmRab29taW5n
Q2FsbGJhY2soKSBjb25zdDsKIAorICAgIHZvaWQgc2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2so
SlNWYWx1ZVJlZik7CisgICAgSlNWYWx1ZVJlZiBkaWRTaG93S2V5Ym9hcmRDYWxsYmFjaygpIGNv
bnN0OworCisgICAgdm9pZCBzZXREaWRIaWRlS2V5Ym9hcmRDYWxsYmFjayhKU1ZhbHVlUmVmKTsK
KyAgICBKU1ZhbHVlUmVmIGRpZEhpZGVLZXlib2FyZENhbGxiYWNrKCkgY29uc3Q7CisKICAgICBk
b3VibGUgem9vbVNjYWxlKCkgY29uc3Q7CiAgICAgZG91YmxlIG1pbmltdW1ab29tU2NhbGUoKSBj
b25zdDsKICAgICBkb3VibGUgbWF4aW11bVpvb21TY2FsZSgpIGNvbnN0OwpAQCAtNjcsNiArNzUs
OCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcGxhdGZvcm1TZXRXaWxsQmVnaW5ab29taW5n
Q2FsbGJhY2soKTsKICAgICB2b2lkIHBsYXRmb3JtU2V0RGlkRW5kWm9vbWluZ0NhbGxiYWNrKCk7
CisgICAgdm9pZCBwbGF0Zm9ybVNldERpZFNob3dLZXlib2FyZENhbGxiYWNrKCk7CisgICAgdm9p
ZCBwbGF0Zm9ybVNldERpZEhpZGVLZXlib2FyZENhbGxiYWNrKCk7CiAKICAgICB2aXJ0dWFsIEpT
Q2xhc3NSZWYgd3JhcHBlckNsYXNzKCkgb3ZlcnJpZGU7CiAKQEAgLTc2LDYgKzg2LDggQEAgcHJp
dmF0ZToKIAogICAgIHVuc2lnbmVkIG1fd2lsbEJlZ2luWm9vbWluZ0NhbGxiYWNrIHsgMCB9Owog
ICAgIHVuc2lnbmVkIG1fZGlkRW5kWm9vbWluZ0NhbGxiYWNrIHsgMCB9OworICAgIHVuc2lnbmVk
IG1fZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2sgeyAwIH07CisgICAgdW5zaWduZWQgbV9kaWRIaWRl
S2V5Ym9hcmRDYWxsYmFjayB7IDAgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jb2NvYS9UZXN0UnVubmVyV0tXZWJWaWV3LmgKaW5kZXggM2YxODU5MGEyMjNhMjNl
OWU2ZmYxZjhiMDg0MDJlN2E4Yjc4NWZlMy4uZjJlNDJlODhiZjljOWM4MTI3ZGZlODRiMmJmZGM5
MDIwYTIzNmRkNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0
UnVubmVyV0tXZWJWaWV3LmgKQEAgLTMzLDkgKzMzLDEyIEBACiAKIEBwcm9wZXJ0eSAobm9uYXRv
bWljLCBjb3B5KSB2b2lkIChed2lsbEJlZ2luWm9vbWluZ0NhbGxiYWNrKSh2b2lkKTsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheZGlkRW5kWm9vbWluZ0NhbGxiYWNrKSh2b2lk
KTsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljLCBjb3B5KSB2b2lkICheZGlkU2hvd0tleWJvYXJkQ2Fs
bGJhY2spKHZvaWQpOworQHByb3BlcnR5IChub25hdG9taWMsIGNvcHkpIHZvaWQgKF5kaWRIaWRl
S2V5Ym9hcmRDYWxsYmFjaykodm9pZCk7CiAKLS0gKHZvaWQpem9vbVRvU2NhbGU6KGRvdWJsZSlz
Y2FsZSBhbmltYXRlZDooQk9PTClhbmltYXRlZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
dm9pZCkpY29tcGxldGlvbkhhbmRsZXI7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZToo
Q0dSZWN0KWZyYW1lIGNvbmZpZ3VyYXRpb246KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25m
aWd1cmF0aW9uOwogCistICh2b2lkKXpvb21Ub1NjYWxlOihkb3VibGUpc2NhbGUgYW5pbWF0ZWQ6
KEJPT0wpYW5pbWF0ZWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRp
b25IYW5kbGVyOwogI2VuZGlmCiAKIEBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvY29jb2EvVGVzdFJ1bm5lcldLV2ViVmlldy5tbQppbmRleCBjYzUzMGIwZDI5OTRjMWRkNmI5
ZDY3OTA3MzQ4OTg0MmYwZGVmY2ZiLi4xYzQ4YTdiN2U1NDNkY2Y1Y2VlMzZiZjYyOWNlYzU4Njdh
MWFhOGE4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NvY29hL1Rlc3RSdW5u
ZXJXS1dlYlZpZXcubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jb2NvYS9UZXN0UnVu
bmVyV0tXZWJWaWV3Lm1tCkBAIC00NCw2ICs0NCw3IEBAIEBlbmQKIAogQGludGVyZmFjZSBUZXN0
UnVubmVyV0tXZWJWaWV3ICgpCiBAcHJvcGVydHkgKG5vbmF0b21pYywgY29weSkgdm9pZCAoXnpv
b21Ub1NjYWxlQ29tcGxldGlvbkhhbmRsZXIpKHZvaWQpOworQHByb3BlcnR5IChub25hdG9taWMs
IGNvcHkpIHZvaWQgKF5zaG93S2V5Ym9hcmRDb21wbGV0aW9uSGFuZGxlcikodm9pZCk7CiBAZW5k
CiAKIEBpbXBsZW1lbnRhdGlvbiBUZXN0UnVubmVyV0tXZWJWaWV3CkBAIC01Nyw2ICs1OCwxNiBA
QCAtICh2b2lkKWRyYWdJbWFnZTooTlNJbWFnZSAqKWFuSW1hZ2UgYXQ6KE5TUG9pbnQpdmlld0xv
Y2F0aW9uIG9mZnNldDooTlNTaXplKWluaQogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCist
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbmZpZ3VyYXRpb246
KFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uCit7CisgICAgaWYgKHNlbGYg
PSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFtZSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb25d
KSB7CisgICAgICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyKiBjZW50ZXIgPSBbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl07CisgICAgICAgIFtjZW50ZXIgYWRkT2JzZXJ2ZXI6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2tleWJvYXJkRGlkU2hvdzopIG5hbWU6VUlLZXlib2FyZERp
ZFNob3dOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgICAgIFtjZW50ZXIgYWRkT2JzZXJ2
ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3IoX2tleWJvYXJkRGlkSGlkZTopIG5hbWU6VUlLZXli
b2FyZERpZEhpZGVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07CisgICAgfQorICAgIHJldHVybiBz
ZWxmOworfQorCiAtICh2b2lkKXpvb21Ub1NjYWxlOihkb3VibGUpc2NhbGUgYW5pbWF0ZWQ6KEJP
T0wpYW5pbWF0ZWQgY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKHZvaWQpKWNvbXBsZXRpb25I
YW5kbGVyCiB7CiAgICAgQVNTRVJUKCFzZWxmLnpvb21Ub1NjYWxlQ29tcGxldGlvbkhhbmRsZXIp
OwpAQCAtNjUsNiArNzYsMTggQEAgLSAodm9pZCl6b29tVG9TY2FsZTooZG91YmxlKXNjYWxlIGFu
aW1hdGVkOihCT09MKWFuaW1hdGVkIGNvbXBsZXRpb25IYW5kbGVyOih2b2kKICAgICBbc2VsZi5z
Y3JvbGxWaWV3IHNldFpvb21TY2FsZTpzY2FsZSBhbmltYXRlZDphbmltYXRlZF07CiB9CiAKKy0g
KHZvaWQpX2tleWJvYXJkRGlkU2hvdzooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KK3sK
KyAgICBpZiAoc2VsZi5kaWRTaG93S2V5Ym9hcmRDYWxsYmFjaykKKyAgICAgICAgc2VsZi5kaWRT
aG93S2V5Ym9hcmRDYWxsYmFjaygpOworfQorCistICh2b2lkKV9rZXlib2FyZERpZEhpZGU6KE5T
Tm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCit7CisgICAgaWYgKHNlbGYuZGlkSGlkZUtleWJv
YXJkQ2FsbGJhY2spCisgICAgICAgIHNlbGYuZGlkSGlkZUtleWJvYXJkQ2FsbGJhY2soKTsKK30K
KwogLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzooVUlTY3JvbGxWaWV3ICopc2Ny
b2xsVmlldyB3aXRoVmlldzoobnVsbGFibGUgVUlWaWV3ICopdmlldwogewogICAgIFtzdXBlciBz
Y3JvbGxWaWV3V2lsbEJlZ2luWm9vbWluZzpzY3JvbGxWaWV3IHdpdGhWaWV3OnZpZXddOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLmgKaW5kZXggMjEy
YjIxNjUxZDJiZjZjNzA0ZDg2OGM3N2ZjODIzYWE2N2YzNGQxOS4uYWY5YmU2YTU3Y2EyNTUyYWRk
ODc2OTI0ZGQ4MWQ3MGIyOTM0YzNjYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9pb3MvSElERXZlbnRHZW5lcmF0b3IuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lv
cy9ISURFdmVudEdlbmVyYXRvci5oCkBAIC01MCw0ICs1MCw3IEBACiAKIC0gKHZvaWQpbWFya2Vy
RXZlbnRSZWNlaXZlZDooSU9ISURFdmVudFJlZilldmVudDsKIAorLy8gS2V5Ym9hcmQKKy0gKHZv
aWQpa2V5RG93bjooTlNTdHJpbmcgKiljaGFyYWN0ZXIgY29tcGxldGlvbkJsb2NrOih2b2lkIChe
KSh2b2lkKSljb21wbGV0aW9uQmxvY2s7CisKIEBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL0hJREV2ZW50R2VuZXJhdG9yLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvSElERXZlbnRHZW5lcmF0b3IubW0KaW5kZXggMmRkZTZhODQwMWY2NzE4MjBhM2E5
ZjA3ZTdhZjU4NGEyODk2NGM4YS4uNjIwZjA3OGE1MzYyZTY0ZmMyMDIwYzkyYjhjZTc1Y2FlMjc0
NmU3NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5l
cmF0b3IubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvSElERXZlbnRHZW5lcmF0
b3IubW0KQEAgLTEyOSw2ICsxMjksMTcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICByZXR1
cm4gc2VsZjsKIH0KIAorLSAodm9pZClfc2VuZElPSElES2V5Ym9hcmRFdmVudDoodWludDY0X3Qp
dGltZXN0YW1wIHVzYWdlOih1aW50MzJfdCl1c2FnZSBpc0tleURvd246KGJvb2wpaXNLZXlEb3du
Cit7CisgICAgUmV0YWluUHRyPElPSElERXZlbnRSZWY+IGV2ZW50UmVmID0gYWRvcHRDRihJT0hJ
REV2ZW50Q3JlYXRlS2V5Ym9hcmRFdmVudChrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAgICB0
aW1lc3RhbXAsCisgICAgICAgIGtISURQYWdlX0tleWJvYXJkT3JLZXlwYWQsCisgICAgICAgIHVz
YWdlLAorICAgICAgICBpc0tleURvd24sCisgICAgICAgIGtJT0hJREV2ZW50T3B0aW9uTm9uZSkp
OworICAgIFtzZWxmIF9zZW5kSElERXZlbnQ6ZXZlbnRSZWYuZ2V0KCldOworfQorCiAtIChJT0hJ
REV2ZW50UmVmKV9jcmVhdGVJT0hJREV2ZW50VHlwZTooSGFuZEV2ZW50VHlwZSlldmVudFR5cGUK
IHsKICAgICBCT09MIGlzVG91Y2hpbmcgPSAoZXZlbnRUeXBlID09IEhhbmRFdmVudFRvdWNoZWQg
fHwgZXZlbnRUeXBlID09IEhhbmRFdmVudE1vdmVkIHx8IGV2ZW50VHlwZSA9PSBIYW5kRXZlbnRD
aG9yZENoYW5nZWQpOwpAQCAtNDI4LDQgKzQzOSwxNjkgQEAgLSAodm9pZCltYXJrZXJFdmVudFJl
Y2VpdmVkOihJT0hJREV2ZW50UmVmKWV2ZW50CiAgICAgfQogfQogCitzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkV3JhcFdpdGhTaGlmdEtleUV2ZW50Rm9yQ2hhcmFjdGVyKE5TU3RyaW5nICprZXkp
Cit7CisgICAgaWYgKGtleS5sZW5ndGggIT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGludCBrZXlDb2RlID0gW2tleSBjaGFyYWN0ZXJBdEluZGV4OjBdOworICAgIGlmICg2NSA8PSBr
ZXlDb2RlICYmIGtleUNvZGUgPD0gOTApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHN3aXRj
aCAoa2V5Q29kZSkgeworICAgIGNhc2UgJ2AnOgorICAgIGNhc2UgJyEnOgorICAgIGNhc2UgJ0An
OgorICAgIGNhc2UgJyMnOgorICAgIGNhc2UgJyQnOgorICAgIGNhc2UgJyUnOgorICAgIGNhc2Ug
J14nOgorICAgIGNhc2UgJyYnOgorICAgIGNhc2UgJyonOgorICAgIGNhc2UgJygnOgorICAgIGNh
c2UgJyknOgorICAgIGNhc2UgJ18nOgorICAgIGNhc2UgJysnOgorICAgIGNhc2UgJ3snOgorICAg
IGNhc2UgJ30nOgorICAgIGNhc2UgJ3wnOgorICAgIGNhc2UgJzonOgorICAgIGNhc2UgJyInOgor
ICAgIGNhc2UgJzwnOgorICAgIGNhc2UgJz4nOgorICAgIGNhc2UgJz8nOgorICAgIGNhc2UgJ34n
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitz
dGF0aWMgaW5saW5lIHVpbnQzMl90IGhpZFVzYWdlQ29kZUZvckNoYXJhY3RlcihOU1N0cmluZyAq
a2V5KQoreworICAgIGNvbnN0IGludCB1cHBlcmNhc2VBbHBoYWJldGljT2Zmc2V0ID0gJ0EnIC0g
a0hJRFVzYWdlX0tleWJvYXJkQTsKKyAgICBjb25zdCBpbnQgbG93ZXJjYXNlQWxwaGFiZXRpY09m
ZnNldCA9ICdhJyAtIGtISURVc2FnZV9LZXlib2FyZEE7CisgICAgY29uc3QgaW50IG51bWVyaWNO
b25aZXJvT2Zmc2V0ID0gJzEnIC0ga0hJRFVzYWdlX0tleWJvYXJkMTsKKyAgICBpZiAoa2V5Lmxl
bmd0aCA9PSAxKSB7CisgICAgICAgIC8vIEhhbmRsZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBh
bmQgYmFzaWMgc3ltYm9scy4KKyAgICAgICAgaW50IGtleUNvZGUgPSBba2V5IGNoYXJhY3RlckF0
SW5kZXg6MF07CisgICAgICAgIGlmICg5NyA8PSBrZXlDb2RlICYmIGtleUNvZGUgPD0gMTIyKSAv
LyBIYW5kbGUgYS16LgorICAgICAgICAgICAgcmV0dXJuIGtleUNvZGUgLSBsb3dlcmNhc2VBbHBo
YWJldGljT2Zmc2V0OworCisgICAgICAgIGlmICg2NSA8PSBrZXlDb2RlICYmIGtleUNvZGUgPD0g
OTApIC8vIEhhbmRsZSBBLVouCisgICAgICAgICAgICByZXR1cm4ga2V5Q29kZSAtIHVwcGVyY2Fz
ZUFscGhhYmV0aWNPZmZzZXQ7CisKKyAgICAgICAgaWYgKDQ5IDw9IGtleUNvZGUgJiYga2V5Q29k
ZSA8PSA1NykgLy8gSGFuZGxlIDEtOS4KKyAgICAgICAgICAgIHJldHVybiBrZXlDb2RlIC0gbnVt
ZXJpY05vblplcm9PZmZzZXQ7CisKKyAgICAgICAgLy8gSGFuZGxlIGFsbCBvdGhlciBjYXNlcy4K
KyAgICAgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAgICAgIGNhc2UgJ2AnOgorICAgICAgICBj
YXNlICd+JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRHcmF2ZUFjY2Vu
dEFuZFRpbGRlOworICAgICAgICBjYXNlICchJzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNh
Z2VfS2V5Ym9hcmQxOworICAgICAgICBjYXNlICdAJzoKKyAgICAgICAgICAgIHJldHVybiBrSElE
VXNhZ2VfS2V5Ym9hcmQyOworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgIHJldHVybiBr
SElEVXNhZ2VfS2V5Ym9hcmQzOworICAgICAgICBjYXNlICckJzoKKyAgICAgICAgICAgIHJldHVy
biBrSElEVXNhZ2VfS2V5Ym9hcmQ0OworICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgIHJl
dHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ1OworICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAg
IHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ2OworICAgICAgICBjYXNlICcmJzoKKyAgICAgICAg
ICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ3OworICAgICAgICBjYXNlICcqJzoKKyAgICAg
ICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ4OworICAgICAgICBjYXNlICcoJzoKKyAg
ICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmQ5OworICAgICAgICBjYXNlICcpJzoK
KyAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJk
MDsKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgIGNhc2UgJ18nOgorICAgICAgICAgICAgcmV0
dXJuIGtISURVc2FnZV9LZXlib2FyZEh5cGhlbjsKKyAgICAgICAgY2FzZSAnPSc6CisgICAgICAg
IGNhc2UgJysnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZEVxdWFsU2ln
bjsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXli
b2FyZFRhYjsKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAg
ICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZE9wZW5CcmFja2V0OworICAgICAgICBjYXNlICdd
JzoKKyAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJv
YXJkQ2xvc2VCcmFja2V0OworICAgICAgICBjYXNlICdcXCc6CisgICAgICAgIGNhc2UgJ3wnOgor
ICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZEJhY2tzbGFzaDsKKyAgICAgICAg
Y2FzZSAnOyc6CisgICAgICAgIGNhc2UgJzonOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2Fn
ZV9LZXlib2FyZFNlbWljb2xvbjsKKyAgICAgICAgY2FzZSAnXCcnOgorICAgICAgICBjYXNlICci
JzoKKyAgICAgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRRdW90ZTsKKyAgICAgICAg
Y2FzZSAnXHInOgorICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVz
YWdlX0tleWJvYXJkUmV0dXJuT3JFbnRlcjsKKyAgICAgICAgY2FzZSAnLCc6CisgICAgICAgIGNh
c2UgJzwnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZENvbW1hOworICAg
ICAgICBjYXNlICcuJzoKKyAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICByZXR1cm4ga0hJ
RFVzYWdlX0tleWJvYXJkUGVyaW9kOworICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgY2FzZSAn
Pyc6CisgICAgICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkU2xhc2g7CisgICAgICAg
IGNhc2UgJyAnOgorICAgICAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFNwYWNlYmFy
OworICAgICAgICB9CisgICAgfQorICAgIGNvbnN0IGludCBmdW5jdGlvbktleU9mZnNldCA9IGtI
SURVc2FnZV9LZXlib2FyZEYxOworICAgIGZvciAoaW50IGZ1bmN0aW9uS2V5SW5kZXggPSAxOyBm
dW5jdGlvbktleUluZGV4IDw9IDEyOyArK2Z1bmN0aW9uS2V5SW5kZXgpIHsKKyAgICAgICAgaWYg
KFtrZXkgaXNFcXVhbFRvU3RyaW5nOltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiRiVkIiwg
ZnVuY3Rpb25LZXlJbmRleF1dKQorICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uS2V5T2Zmc2V0
ICsgZnVuY3Rpb25LZXlJbmRleCAtIDE7CisgICAgfQorICAgIGlmIChba2V5IGlzRXF1YWxUb1N0
cmluZzpAImVzY2FwZSJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkRXNjYXBl
OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAInJldHVybiJdIHx8IFtrZXkgaXNFcXVh
bFRvU3RyaW5nOkAiZW50ZXIiXSkKKyAgICAgICAgcmV0dXJuIGtISURVc2FnZV9LZXlib2FyZFJl
dHVybk9yRW50ZXI7CisgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAibGVmdEFycm93Il0p
CisgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0QXJyb3c7CisgICAgaWYgKFtr
ZXkgaXNFcXVhbFRvU3RyaW5nOkAicmlnaHRBcnJvdyJdKQorICAgICAgICByZXR1cm4ga0hJRFVz
YWdlX0tleWJvYXJkUmlnaHRBcnJvdzsKKyAgICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJ1
cEFycm93Il0pCisgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRVcEFycm93OworICAg
IGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImRvd25BcnJvdyJdKQorICAgICAgICByZXR1cm4g
a0hJRFVzYWdlX0tleWJvYXJkRG93bkFycm93OworICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmlu
ZzpAImRlbGV0ZSJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkRGVsZXRlT3JC
YWNrc3BhY2U7CisgICAgLy8gVGhlIHNpbXVsYXRvciBrZXlib2FyZCBpbnRlcnByZXRzIGJvdGgg
bGVmdCBhbmQgcmlnaHQgbW9kaWZpZXIga2V5cyB1c2luZyB0aGUgbGVmdCB2ZXJzaW9uIG9mIHRo
ZSB1c2FnZSBjb2RlLgorICAgIGlmIChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRDb250cm9s
Il0gfHwgW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJyaWdodENvbnRyb2wiXSkKKyAgICAgICAgcmV0
dXJuIGtISURVc2FnZV9LZXlib2FyZExlZnRDb250cm9sOworICAgIGlmIChba2V5IGlzRXF1YWxU
b1N0cmluZzpAImxlZnRTaGlmdCJdIHx8IFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAicmlnaHRTaGlm
dCJdKQorICAgICAgICByZXR1cm4ga0hJRFVzYWdlX0tleWJvYXJkTGVmdFNoaWZ0OworICAgIGlm
IChba2V5IGlzRXF1YWxUb1N0cmluZzpAImxlZnRBbHQiXSB8fCBba2V5IGlzRXF1YWxUb1N0cmlu
ZzpAInJpZ2h0QWx0Il0pCisgICAgICAgIHJldHVybiBrSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0QWx0
OworCisgICAgcmV0dXJuIDA7Cit9CisKKy0gKHZvaWQpa2V5RG93bjooTlNTdHJpbmcgKiljaGFy
YWN0ZXIgY29tcGxldGlvbkJsb2NrOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uQmxvY2sKK3sK
KyAgICBib29sIHNob3VsZFdyYXBXaXRoU2hpZnQgPSBzaG91bGRXcmFwV2l0aFNoaWZ0S2V5RXZl
bnRGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICB1aW50MzJfdCB1c2FnZSA9IGhpZFVzYWdl
Q29kZUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIHVpbnQ2NF90IGFic29sdXRlTWFjaFRp
bWUgPSBtYWNoX2Fic29sdXRlX3RpbWUoKTsKKworICAgIGlmIChzaG91bGRXcmFwV2l0aFNoaWZ0
KQorICAgICAgICBbc2VsZiBfc2VuZElPSElES2V5Ym9hcmRFdmVudDphYnNvbHV0ZU1hY2hUaW1l
IHVzYWdlOmtISURVc2FnZV9LZXlib2FyZExlZnRTaGlmdCBpc0tleURvd246dHJ1ZV07CisKKyAg
ICBbc2VsZiBfc2VuZElPSElES2V5Ym9hcmRFdmVudDphYnNvbHV0ZU1hY2hUaW1lIHVzYWdlOnVz
YWdlIGlzS2V5RG93bjp0cnVlXTsKKyAgICBbc2VsZiBfc2VuZElPSElES2V5Ym9hcmRFdmVudDph
YnNvbHV0ZU1hY2hUaW1lIHVzYWdlOnVzYWdlIGlzS2V5RG93bjpmYWxzZV07CisKKyAgICBpZiAo
c2hvdWxkV3JhcFdpdGhTaGlmdCkKKyAgICAgICAgW3NlbGYgX3NlbmRJT0hJREtleWJvYXJkRXZl
bnQ6YWJzb2x1dGVNYWNoVGltZSB1c2FnZTprSElEVXNhZ2VfS2V5Ym9hcmRMZWZ0U2hpZnQgaXNL
ZXlEb3duOmZhbHNlXTsKKworICAgIFtzZWxmIF9zZW5kTWFya2VySElERXZlbnRXaXRoQ29tcGxl
dGlvbkJsb2NrOmNvbXBsZXRpb25CbG9ja107Cit9CisKIEBlbmQKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL0lPS2l0U1BJLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2lvcy9JT0tpdFNQSS5oCmluZGV4IDFlOTAyY2MxODUyY2U5MGMwZDQ3ZGQ3MzlhYzRhMjgyMWZk
NDExOGUuLjNhMDU0YzcwZDZiOTM2NzExODdmMzMzZGVkMWQzNjZjMjIxZjFmZDEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL0lPS2l0U1BJLmgKKysrIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvSU9LaXRTUEkuaApAQCAtMTI3LDYgKzEyNyw1MSBAQCBJT0hJREV2
ZW50U3lzdGVtQ2xpZW50UmVmIElPSElERXZlbnRTeXN0ZW1DbGllbnRDcmVhdGUoQ0ZBbGxvY2F0
b3JSZWYpOwogI2RlZmluZSBrR1NFdmVudFBhdGhJbmZvSW5SYW5nZSAoMSA8PCAwKQogI2RlZmlu
ZSBrR1NFdmVudFBhdGhJbmZvSW5Ub3VjaCAoMSA8PCAxKQogCitlbnVtIHsKKyAgICBrSElEUGFn
ZV9LZXlib2FyZE9yS2V5cGFkID0gMHgwNworfTsKKworZW51bSB7CisgICAga0hJRFVzYWdlX0tl
eWJvYXJkQSA9IDB4MDQsCisgICAga0hJRFVzYWdlX0tleWJvYXJkMSA9IDB4MUUsCisgICAga0hJ
RFVzYWdlX0tleWJvYXJkMiA9IDB4MUYsCisgICAga0hJRFVzYWdlX0tleWJvYXJkMyA9IDB4MjAs
CisgICAga0hJRFVzYWdlX0tleWJvYXJkNCA9IDB4MjEsCisgICAga0hJRFVzYWdlX0tleWJvYXJk
NSA9IDB4MjIsCisgICAga0hJRFVzYWdlX0tleWJvYXJkNiA9IDB4MjMsCisgICAga0hJRFVzYWdl
X0tleWJvYXJkNyA9IDB4MjQsCisgICAga0hJRFVzYWdlX0tleWJvYXJkOCA9IDB4MjUsCisgICAg
a0hJRFVzYWdlX0tleWJvYXJkOSA9IDB4MjYsCisgICAga0hJRFVzYWdlX0tleWJvYXJkMCA9IDB4
MjcsCisgICAga0hJRFVzYWdlX0tleWJvYXJkUmV0dXJuT3JFbnRlciA9IDB4MjgsCisgICAga0hJ
RFVzYWdlX0tleWJvYXJkRXNjYXBlID0gMHgyOSwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmREZWxl
dGVPckJhY2tzcGFjZSA9IDB4MkEsCisgICAga0hJRFVzYWdlX0tleWJvYXJkVGFiID0gMHgyQiwK
KyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRTcGFjZWJhciA9IDB4MkMsCisgICAga0hJRFVzYWdlX0tl
eWJvYXJkSHlwaGVuID0gMHgyRCwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRFcXVhbFNpZ24gPSAw
eDJFLAorICAgIGtISURVc2FnZV9LZXlib2FyZE9wZW5CcmFja2V0ID0gMHgyRiwKKyAgICBrSElE
VXNhZ2VfS2V5Ym9hcmRDbG9zZUJyYWNrZXQgPSAweDMwLAorICAgIGtISURVc2FnZV9LZXlib2Fy
ZEJhY2tzbGFzaCA9IDB4MzEsCisgICAga0hJRFVzYWdlX0tleWJvYXJkU2VtaWNvbG9uID0gMHgz
MywKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRRdW90ZSA9IDB4MzQsCisgICAga0hJRFVzYWdlX0tl
eWJvYXJkR3JhdmVBY2NlbnRBbmRUaWxkZSA9IDB4MzUsCisgICAga0hJRFVzYWdlX0tleWJvYXJk
Q29tbWEgPSAweDM2LAorICAgIGtISURVc2FnZV9LZXlib2FyZFBlcmlvZCA9IDB4MzcsCisgICAg
a0hJRFVzYWdlX0tleWJvYXJkU2xhc2ggPSAweDM4LAorICAgIGtISURVc2FnZV9LZXlib2FyZEYx
ID0gMHgzQSwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmRIb21lID0gMHg0QSwKKyAgICBrSElEVXNh
Z2VfS2V5Ym9hcmRQYWdlVXAgPSAweDRCLAorICAgIGtISURVc2FnZV9LZXlib2FyZEVuZCA9IDB4
NEQsCisgICAga0hJRFVzYWdlX0tleWJvYXJkUmlnaHRBcnJvdyA9IDB4NEYsCisgICAga0hJRFVz
YWdlX0tleWJvYXJkTGVmdEFycm93ID0gMHg1MCwKKyAgICBrSElEVXNhZ2VfS2V5Ym9hcmREb3du
QXJyb3cgPSAweDUxLAorICAgIGtISURVc2FnZV9LZXlib2FyZFVwQXJyb3cgPSAweDUyLAorICAg
IGtISURVc2FnZV9LZXlib2FyZExlZnRDb250cm9sID0gMHhFMCwKKyAgICBrSElEVXNhZ2VfS2V5
Ym9hcmRMZWZ0U2hpZnQgPSAweEUxLAorICAgIGtISURVc2FnZV9LZXlib2FyZExlZnRBbHQgPSAw
eEUyCit9OworCiBXVEZfRVhURVJOX0NfRU5ECiAKICNlbmRpZiAvLyBVU0UoQVBQTEVfSU5URVJO
QUxfU0RLKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRD
b250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVUlTY3JpcHRDb250
cm9sbGVySU9TLm1tCmluZGV4IDhhODY0ODYyYjc3OGVhM2U1NTVmZGRmMzI4ZWUzNjVjMDZmM2Nj
YTguLmViMWJmMTIzZmMxODg2ODJkZDI4YTBmZGFlOWY0YWI3NjBmYTBkZDQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1VJU2NyaXB0Q29udHJvbGxlcklPUy5tbQorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9VSVNjcmlwdENvbnRyb2xsZXJJT1MubW0KQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiSElERXZlbnRHZW5lcmF0b3IuaCIKICNpbXBvcnQg
IlBsYXRmb3JtV2ViVmlldy5oIgorI2ltcG9ydCAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW1wb3J0
ICJUZXN0Q29udHJvbGxlci5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2lt
cG9ydCAiVUlTY3JpcHRDb250ZXh0LmgiCkBAIC05Miw2ICs5MywxNiBAQCB2b2lkIFVJU2NyaXB0
Q29udHJvbGxlcjo6ZG91YmxlVGFwQXRQb2ludChsb25nIHgsIGxvbmcgeSwgSlNWYWx1ZVJlZiBj
YWxsYmFjaykKICAgICB9XTsKIH0KIAordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6OnR5cGVDaGFy
YWN0ZXJVc2luZ0hhcmR3YXJlS2V5Ym9hcmQoSlNTdHJpbmdSZWYgY2hhcmFjdGVyLCBKU1ZhbHVl
UmVmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVkIGNhbGxiYWNrSUQgPSBtX2NvbnRleHQucHJl
cGFyZUZvckFzeW5jVGFzayhjYWxsYmFjayk7CisKKyAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIGtl
eWJvYXJkIGlzIGFscmVhZHkgc2hvd24uCisgICAgW1tISURFdmVudEdlbmVyYXRvciBzaGFyZWRI
SURFdmVudEdlbmVyYXRvcl0ga2V5RG93bjp0b1dURlN0cmluZyh0b1dLKGNoYXJhY3RlcikpIGNv
bXBsZXRpb25CbG9jazpeeworICAgICAgICBtX2NvbnRleHQuYXN5bmNUYXNrQ29tcGxldGUoY2Fs
bGJhY2tJRCk7CisgICAgfV07Cit9CisKIGRvdWJsZSBVSVNjcmlwdENvbnRyb2xsZXI6Om1pbmlt
dW1ab29tU2NhbGUoKSBjb25zdAogewogICAgIFRlc3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcg
PSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCk7CkBAIC0xMzAsNiArMTQxLDIyIEBAIHZvaWQgVUlTY3JpcHRDb250cm9sbGVyOjpwbGF0Zm9y
bVNldERpZEVuZFpvb21pbmdDYWxsYmFjaygpCiAgICAgfTsKIH0KIAordm9pZCBVSVNjcmlwdENv
bnRyb2xsZXI6OnBsYXRmb3JtU2V0RGlkU2hvd0tleWJvYXJkQ2FsbGJhY2soKQoreworICAgIFRl
c3RSdW5uZXJXS1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisgICAgd2ViVmlldy5kaWRTaG93S2V5Ym9h
cmRDYWxsYmFjayA9IF57CisgICAgICAgIG1fY29udGV4dC5maXJlQ2FsbGJhY2sobV9kaWRTaG93
S2V5Ym9hcmRDYWxsYmFjayk7CisgICAgfTsKK30KKwordm9pZCBVSVNjcmlwdENvbnRyb2xsZXI6
OnBsYXRmb3JtU2V0RGlkSGlkZUtleWJvYXJkQ2FsbGJhY2soKQoreworICAgIFRlc3RSdW5uZXJX
S1dlYlZpZXcgKndlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZp
ZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisgICAgd2ViVmlldy5kaWRIaWRlS2V5Ym9hcmRDYWxsYmFj
ayA9IF57CisgICAgICAgIG1fY29udGV4dC5maXJlQ2FsbGJhY2sobV9kaWRIaWRlS2V5Ym9hcmRD
YWxsYmFjayk7CisgICAgfTsKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmlu
ZGV4IDQzMTI2ZWUzNjE5NThhN2YxYzUxMDc1NzhlNDdjY2QwMmFhYWZhMTIuLjRkZmE1NTRmMGIx
YTdmOGE0YzMyZGY3NzcyYWRmMTA4Y2QwMzk4ZDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0No
YW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
NS0wOS0zMCAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQga2V5Ym9hcmQgZXZlbnQgc2VuZGluZyBmb3IgaU9TIGluIFdlYktpdFRlc3RS
dW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
OTY3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZHMgYSBuZXcgYmFzaWMgdGVzdCBmb3IgdGhlIG9uaW5wdXQgZXZlbnQgbGlzdGVuZXIgd2hlbiB0
eXBpbmcgaW4gYSB0ZXh0IGZpZWxkLgorCisgICAgICAgICogZmFzdC9ldmVudHMvaW9zL2lucHV0
LXZhbHVlLWFmdGVyLW9uaW5wdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC5odG1sOiBBZGRlZC4KKwogMjAx
NS0wOS0yOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbaU9TXSBBbGxvdyB0ZXN0cyB0byBnZW5lcmF0ZSB1c2VyIGdlc3R1cmVzIGZvciBVSSB0ZXN0
aW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3MvaW5wdXQtdmFsdWUt
YWZ0ZXItb25pbnB1dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3Mv
aW5wdXQtdmFsdWUtYWZ0ZXItb25pbnB1dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRiYmY0
YjQ4MTZhOWFiYmIyMzlkOTE5OGVlZjZlNTNkZjg0MzYxZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0LWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDIgQEAKKworU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgb25pbnB1dCwg
dmFsdWUgaXMgbm93ICJhIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9z
L2lucHV0LXZhbHVlLWFmdGVyLW9uaW5wdXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg3Nzk5M2E2
YzdiYmNjMzU0OThmOTQzMWU2ZTM0NjNhMWVkN2FkZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy9pbnB1dC12YWx1ZS1hZnRlci1vbmlucHV0Lmh0bWwKQEAg
LTAsMCArMSw0NiBAQAorPGh0bWw+CisKKzxoZWFkPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0
IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEuMCI+CisgICAgPHNjcmlwdCBpZD0idWktc2NyaXB0
IiB0eXBlPSJ0ZXh0L3BsYWluIj4KKyAgICAgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
dWlDb250cm9sbGVyLnNpbmdsZVRhcEF0UG9pbnQoNTAsIDI1LCBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICB1aUNvbnRyb2xsZXIuZGlkU2hvd0tleWJvYXJkQ2FsbGJhY2sgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnR5cGVDaGFyYWN0ZXJVc2lu
Z0hhcmR3YXJlS2V5Ym9hcmQoImEiLCBmdW5jdGlvbigpIHsgfSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pKCk7CisgICAgPC9zY3JpcHQ+CisKKyAgICA8
c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRVSVNjcmlwdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidWktc2Ny
aXB0IikudGV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVZhbHVlQ2hh
bmdlZCh2YWx1ZSkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKS50ZXh0Q29udGVudCA9ICJTdWNjZXNzZnVsbHkgaGFuZGxlZCBvbmlucHV0LCB2YWx1ZSBp
cyBub3cgXCIiICsgdmFsdWUgKyAiXCIiOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlE
b25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCF3aW5kb3cudGVzdFJ1bm5lciB8fCAhdGVzdFJ1bm5lci5ydW5V
SVNjcmlwdCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHRlc3RSdW5u
ZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgZnVuY3Rpb24ocmVzdWx0KSB7IH0pOworICAg
ICAgICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IHN0eWxlPSJtYXJnaW46IDA7
IiBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgPGlucHV0IHN0eWxlPSJ3aWR0aDogMTAwcHg7IGhl
aWdodDogNTBweDsiIGlkPSJ0ZXN0LWlucHV0IiBvbmlucHV0PSJoYW5kbGVWYWx1ZUNoYW5nZWQo
dGhpcy52YWx1ZSkiPgorPGRpdiBpZD0iY29uc29sZSI+RmFpbGVkIHRvIGhhbmRsZSBvbmlucHV0
PGRpdj4KKzwvYm9keT4KKworPC9odG1sPgo=
</data>
<flag name="review"
          id="287412"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>