<?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>156447</bug_id>
          
          <creation_ts>2016-04-09 16:43:20 -0700</creation_ts>
          <short_desc>REGRESSION (r198933): Unable to login to Google account from Internet Accounts preference pane</short_desc>
          <delta_ts>2016-04-12 19:30:11 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155455</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1182514</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-09 16:43:20 -0700</bug_when>
    <thetext>Using a build of WebKit r198933 (patch for bug #155455) or later as the system WebKit, perform the following:

1. Open System Preferences.
2. Click Internet Accounts.
3. In the Internet Accounts preference pane, click Google from the list of service providers on the right hand side of the window.

Then a sheet will open that is almost entirely empty with the exception of a Cancel button. Prior to r198933 the sheet would open and a Google sign in page would be visible.

For completeness, when following the above instructions I see error messages in my system log of the form:

com.apple.WebKit.Networking.Development: Code signing identifier of client differs from passed client identifier: 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182515</commentid>
    <comment_count>1</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-09 16:44:06 -0700</bug_when>
    <thetext>&lt;rdar://problem/25628133&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182728</commentid>
    <comment_count>2</comment_count>
      <attachid>276156</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 10:45:48 -0700</bug_when>
    <thetext>Created attachment 276156
[Patch] Temporary workaround

Temporary workaround while I further investigate this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182773</commentid>
    <comment_count>3</comment_count>
      <attachid>276156</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 12:06:13 -0700</bug_when>
    <thetext>Comment on attachment 276156
[Patch] Temporary workaround

Clearing flags on attachment: 276156

Committed r199301: &lt;http://trac.webkit.org/changeset/199301&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182774</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 12:06:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182776</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 12:07:09 -0700</bug_when>
    <thetext>Re-opening bug to follow up with more comprehensive fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182843</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 15:46:59 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; &lt;rdar://problem/25628133&gt;

This radar is now associated with the temporary fix &lt;http://trac.webkit.org/changeset/199301&gt; (comment #3).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182844</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 15:47:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/25661828&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182848</commentid>
    <comment_count>8</comment_count>
      <attachid>276180</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 15:50:38 -0700</bug_when>
    <thetext>Created attachment 276180
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182866</commentid>
    <comment_count>9</comment_count>
      <attachid>276185</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 16:17:37 -0700</bug_when>
    <thetext>Created attachment 276185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182872</commentid>
    <comment_count>10</comment_count>
      <attachid>276187</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 16:40:14 -0700</bug_when>
    <thetext>Created attachment 276187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182885</commentid>
    <comment_count>11</comment_count>
      <attachid>276190</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-11 16:50:43 -0700</bug_when>
    <thetext>Created attachment 276190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182906</commentid>
    <comment_count>12</comment_count>
      <attachid>276190</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-11 18:05:49 -0700</bug_when>
    <thetext>Comment on attachment 276190
Patch

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

I don’t think the CodeSigningUtilities.h/mm files need the word &quot;utilities&quot; in their names.

I have a few ideas for streamlining the code, but they are optional ideas.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.h:28
&gt; +#include &lt;wtf/text/WTFString.h&gt;

Should just include &lt;wtf/Forward.h&gt;.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.h:33
&gt; +String codeSigningIdentifier(OSStatus&amp; errorCode);
&gt; +String codeSigningIdentifierForProcess(pid_t, OSStatus&amp; errorCode);

Is it really critical to log the OSStatus? Even if it is, could these functions do the logging themselves? I don’t think we have any callers that want to suppress the logging. The OSStatus out argument is pretty awkward.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:42
&gt; +    CFStringRef appleSignedOrMacAppStoreSignedOrAppleDeveloperSignedRequirement = CFSTR(&quot;(anchor apple) or (anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9]) or (anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] and certificate leaf[field.1.2.840.113635.100.6.1.13])&quot;);
&gt; +    SecRequirementRef signingRequirement = nullptr;
&gt; +    RELEASE_ASSERT(!SecRequirementCreateWithString(appleSignedOrMacAppStoreSignedOrAppleDeveloperSignedRequirement, kSecCSDefaultFlags, &amp;signingRequirement));
&gt; +    RetainPtr&lt;SecRequirementRef&gt; signingRequirementPtr = adoptCF(signingRequirement);

I’d factor this into a separate helper function that returns RetainPtr&lt;SecRequirementRef&gt;.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:47
&gt; +    if (errorCode == errSecCSUnsigned || errorCode == errSecCSReqFailed)
&gt; +        return String(); // Unsigned or signed by a third-party
&gt; +    if (errorCode != errSecSuccess)
&gt; +        return emptyString(); // e.g. invalid/malformed signature

This difference between null string and empty string is super subtle and the meanings of both should be documented in the header.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:51
&gt; +    CFDictionaryRef signingInfo = nullptr;
&gt; +    RELEASE_ASSERT(!SecCodeCopySigningInformation(code, kSecCSDefaultFlags, &amp;signingInfo));
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; signingInfoPtr = adoptCF(signingInfo);

I’d factor this into a separate helper function that takes a SecCodeRef and returns a RetainPtr&lt;CFDictionaryRef&gt;.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:53
&gt; +        codeSigningIdentifier = String(dynamic_cf_cast&lt;CFStringRef&gt;(CFDictionaryGetValue(plist, kCFBundleIdentifierKey)));

Do we need the explicit String() here? I think we don’t.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:55
&gt; +        codeSigningIdentifier = String(dynamic_cf_cast&lt;CFStringRef&gt;(CFDictionaryGetValue(signingInfoPtr.get(), kSecCodeInfoIdentifier)));

Ditto.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:65
&gt; +    SecCodeRef code = nullptr;
&gt; +    if ((errorCode = SecCodeCopySelf(kSecCSDefaultFlags, &amp;code)))
&gt; +        return String();
&gt; +    RetainPtr&lt;SecCodeRef&gt; codePtr = adoptCF(code);

I’d factor this into a separate helper function that returns a RetainPtr&lt;SecCodeRef&gt;.

&gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:80
&gt; +    RetainPtr&lt;CFNumberRef&gt; pidCFNumber = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;pid));
&gt; +    const void* keys[] = { kSecGuestAttributePid };
&gt; +    const void* values[] = { pidCFNumber.get() };
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
&gt; +    SecCodeRef code = nullptr;
&gt; +    if ((errorCode = SecCodeCopyGuestWithAttributes(nullptr, attributes.get(), kSecCSDefaultFlags, &amp;code)))
&gt; +        return String();
&gt; +    RetainPtr&lt;SecCodeRef&gt; codePtr = adoptCF(code);
&gt; +    RELEASE_ASSERT(codePtr);

I’d factor this into a separate helper function that takes a pid_t and returns a RetainPtr&lt;SecCodeRef&gt;.

&gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:31
&gt; +#if PLATFORM(MAC)
&gt; +#import &quot;CodeSigningUtilities.h&quot;
&gt; +#endif

Conditional includes should go in a separate paragraph after the unconditional includes.

But this is in a file with Mac in its title, so why the #if? Is this actually a file that’s used on iOS too?

&gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:145
&gt; +    clientIdentifier = WebKit::codeSigningIdentifier(error);

No need for the WebKit prefix here.

&gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:148
&gt; +        WTFLogAlways(&quot;Could not to get code signing identifier: %ld\n&quot;, static_cast&lt;long&gt;(error));

Message garbled here: &quot;could not to get&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183290</commentid>
    <comment_count>13</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-12 16:43:02 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 276190 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276190&amp;action=review
&gt; 
&gt; I don’t think the CodeSigningUtilities.h/mm files need the word &quot;utilities&quot;
&gt; in their names.
&gt; 

Will drop the suffix &quot;Utilities&quot; from the name of these files such that they read CodeSigning.h/mm.

&gt; [...]
&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.h:28
&gt; &gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; 
&gt; Should just include &lt;wtf/Forward.h&gt;.
&gt; 

Will remove header &lt;wtf/text/WTFString.h&gt; and instead include header &lt;wtf/Forward.h&gt;.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.h:33
&gt; &gt; +String codeSigningIdentifier(OSStatus&amp; errorCode);
&gt; &gt; +String codeSigningIdentifierForProcess(pid_t, OSStatus&amp; errorCode);
&gt; 
&gt; Is it really critical to log the OSStatus? 

I have found that knowing the OSStatus significantly helps expedite the diagnosis of an XPS service termination because it helps rule out other reasons that may cause &quot;Service exited with abnormal code: X&quot; when considered together with the content of other log files. I prefer that we continue to log OSStatus though I will log this error code as part of a RELEASE_ASSERT_WITH_MESSAGE() instead of using WTFLogAlways() since an unexpected OSStatus value indicates a correctness issue in our code that we want to fix.

&gt; Even if it is, could these functions do the logging themselves? I don’t think we have any callers that
&gt; want to suppress the logging. The OSStatus out argument is pretty awkward.
&gt; 

Will remove OSStatus out argument and have the functions do the logging themselves as part of a RELEASE_ASSERT().

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:42
&gt; &gt; +    CFStringRef appleSignedOrMacAppStoreSignedOrAppleDeveloperSignedRequirement = CFSTR(&quot;(anchor apple) or (anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9]) or (anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] and certificate leaf[field.1.2.840.113635.100.6.1.13])&quot;);
&gt; &gt; +    SecRequirementRef signingRequirement = nullptr;
&gt; &gt; +    RELEASE_ASSERT(!SecRequirementCreateWithString(appleSignedOrMacAppStoreSignedOrAppleDeveloperSignedRequirement, kSecCSDefaultFlags, &amp;signingRequirement));
&gt; &gt; +    RetainPtr&lt;SecRequirementRef&gt; signingRequirementPtr = adoptCF(signingRequirement);
&gt; 
&gt; I’d factor this into a separate helper function that returns
&gt; RetainPtr&lt;SecRequirementRef&gt;.
&gt; 

Will do.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:47
&gt; &gt; +    if (errorCode == errSecCSUnsigned || errorCode == errSecCSReqFailed)
&gt; &gt; +        return String(); // Unsigned or signed by a third-party
&gt; &gt; +    if (errorCode != errSecSuccess)
&gt; &gt; +        return emptyString(); // e.g. invalid/malformed signature
&gt; 
&gt; This difference between null string and empty string is super subtle and the
&gt; meanings of both should be documented in the header.
&gt; 

I am unclear how I came to initially choose to specialize the invalid/malformed signature case. It should never be the case that errorCode != errSecSuccess as it represents an unexpected error that we should investigate and fix. I will change this code to use RELEASE_ASSERT_WITH_MESSAGE() to assert !errorCode and emit a message with the OSStatus here, such that this code reads:

...
if (errorCode == errSecCSUnsigned || errorCode == errSecCSReqFailed)
        return String(); // Unsigned or signed by a third-party
RELEASE_ASSERT_WITH_MESSAGE(!errorCode, &quot;SecCodeCheckValidity() failed with error: %ld&quot;, static_cast&lt;long&gt;(errorCode));
...

As a side effect of this change this function either returns a null string or a non-empty string. I will also add a comment in the header file, CodeSigning.h, to explain the meaning of the null string:

...
// These functions return a null string if the process is either unsigned or signed by a third-party.
String codeSigningIdentifier();
String codeSigningIdentifierForProcess(pid_t);
...

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:51
&gt; &gt; +    CFDictionaryRef signingInfo = nullptr;
&gt; &gt; +    RELEASE_ASSERT(!SecCodeCopySigningInformation(code, kSecCSDefaultFlags, &amp;signingInfo));
&gt; &gt; +    RetainPtr&lt;CFDictionaryRef&gt; signingInfoPtr = adoptCF(signingInfo);
&gt; 
&gt; I’d factor this into a separate helper function that takes a SecCodeRef and
&gt; returns a RetainPtr&lt;CFDictionaryRef&gt;.
&gt; 

Will do.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:53
&gt; &gt; +        codeSigningIdentifier = String(dynamic_cf_cast&lt;CFStringRef&gt;(CFDictionaryGetValue(plist, kCFBundleIdentifierKey)));
&gt; 
&gt; Do we need the explicit String() here? I think we don’t.
&gt; 

Will remove explicit call to String constructor as it is not necessary.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:55
&gt; &gt; +        codeSigningIdentifier = String(dynamic_cf_cast&lt;CFStringRef&gt;(CFDictionaryGetValue(signingInfoPtr.get(), kSecCodeInfoIdentifier)));
&gt; 
&gt; Ditto.
&gt; 

Will remove explicit call to String constructor as it is not necessary.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:65
&gt; &gt; +    SecCodeRef code = nullptr;
&gt; &gt; +    if ((errorCode = SecCodeCopySelf(kSecCSDefaultFlags, &amp;code)))
&gt; &gt; +        return String();
&gt; &gt; +    RetainPtr&lt;SecCodeRef&gt; codePtr = adoptCF(code);
&gt; 
&gt; I’d factor this into a separate helper function that returns a
&gt; RetainPtr&lt;SecCodeRef&gt;.
&gt; 

Will do.

&gt; &gt; Source/WebKit2/Shared/mac/CodeSigningUtilities.mm:80
&gt; &gt; +    RetainPtr&lt;CFNumberRef&gt; pidCFNumber = adoptCF(CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &amp;pid));
&gt; &gt; +    const void* keys[] = { kSecGuestAttributePid };
&gt; &gt; +    const void* values[] = { pidCFNumber.get() };
&gt; &gt; +    RetainPtr&lt;CFDictionaryRef&gt; attributes = adoptCF(CFDictionaryCreate(kCFAllocatorDefault, keys, values, WTF_ARRAY_LENGTH(keys), &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));
&gt; &gt; +    SecCodeRef code = nullptr;
&gt; &gt; +    if ((errorCode = SecCodeCopyGuestWithAttributes(nullptr, attributes.get(), kSecCSDefaultFlags, &amp;code)))
&gt; &gt; +        return String();
&gt; &gt; +    RetainPtr&lt;SecCodeRef&gt; codePtr = adoptCF(code);
&gt; &gt; +    RELEASE_ASSERT(codePtr);
&gt; 
&gt; I’d factor this into a separate helper function that takes a pid_t and
&gt; returns a RetainPtr&lt;SecCodeRef&gt;.
&gt; 

Will do.

&gt; &gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:31
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +#import &quot;CodeSigningUtilities.h&quot;
&gt; &gt; +#endif
&gt; 
&gt; Conditional includes should go in a separate paragraph after the
&gt; unconditional includes.
&gt; 

Will move to separate paragraph after the unconditional includes.

&gt; But this is in a file with Mac in its title, so why the #if? Is this
&gt; actually a file that’s used on iOS too?
&gt; 

Yes, this file is used by iOS as well. We should move and rename this file to reflect that is used by both Mac and iOS ports.

&gt; &gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:145
&gt; &gt; +    clientIdentifier = WebKit::codeSigningIdentifier(error);
&gt; 
&gt; No need for the WebKit prefix here.
&gt; 

Will remove prefix.

&gt; &gt; Source/WebKit2/UIProcess/Launcher/mac/ProcessLauncherMac.mm:148
&gt; &gt; +        WTFLogAlways(&quot;Could not to get code signing identifier: %ld\n&quot;, static_cast&lt;long&gt;(error));
&gt; 
&gt; Message garbled here: &quot;could not to get&quot;?

I removed this error message as part of moving the logging/assert responsibility to the codeSigningIdentifier functions and removing their OSStatus out argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183323</commentid>
    <comment_count>14</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-04-12 19:30:11 -0700</bug_when>
    <thetext>Committed r199401: &lt;http://trac.webkit.org/changeset/199401&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276156</attachid>
            <date>2016-04-11 10:45:48 -0700</date>
            <delta_ts>2016-04-11 15:50:34 -0700</delta_ts>
            <desc>[Patch] Temporary workaround</desc>
            <filename>Bug156447-TemporaryFix.patch</filename>
            <type>text/plain</type>
            <size>3455</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">RnJvbSBiOTk3ODNhMDJiNzlkY2ZlNmVkNjljZDQ2YzExZGIxNzMxYmM5MzIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBEYW5pZWwgQmF0ZXMgPGRiYXRlc0B3ZWJraXQub3JnPgpEYXRl
OiBNb24sIDExIEFwciAyMDE2IDEwOjE2OjM4IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gUkVHUkVT
U0lPTiAocjE5ODkzMyk6IFVuYWJsZSB0byBsb2dpbiB0byBHb29nbGUgYWNjb3VudCBmcm9tCiBJ
bnRlcm5ldCBBY2NvdW50cyBwcmVmZXJlbmNlIHBhbmUKIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTY0NDcgPHJkYXI6Ly9wcm9ibGVtLzI1NjI4MTMzPgoKUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpUZW1wb3JhcmlseSBwZXJmb3JtIGNvZGUgc2lnbmluZyB2
ZXJpZmljYXRpb24gb25seSBmb3IgTWFjIEFwcCBTdG9yZS0gYW5kIEFwcGxlIERldmVsb3Blci0g
c2lnbmVkIGFwcHMuCgoqIFNoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFjLm1tOgooV2ViS2l0Ojpj
b2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKToKLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICB8IDEzICsrKysrKysrKysrKysKIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFjLm1tIHwgIDYgKysrLS0tCiAyIGZpbGVzIGNo
YW5nZWQsIDE2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDg4
YmE5M2IuLmNjNDIxODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wNC0xMSAg
RGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAo
cjE5ODkzMyk6IFVuYWJsZSB0byBsb2dpbiB0byBHb29nbGUgYWNjb3VudCBmcm9tIEludGVybmV0
IEFjY291bnRzIHByZWZlcmVuY2UgcGFuZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDQ3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNTYyODEz
Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZW1w
b3JhcmlseSBwZXJmb3JtIGNvZGUgc2lnbmluZyB2ZXJpZmljYXRpb24gb25seSBmb3IgTWFjIEFw
cCBTdG9yZS0gYW5kIEFwcGxlIERldmVsb3Blci0gc2lnbmVkIGFwcHMuCisKKyAgICAgICAgKiBT
aGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29kZVNpZ25p
bmdJZGVudGlmaWVyRm9yUHJvY2Vzcyk6CisKIDIwMTYtMDQtMDggIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgY3VzdG9tIHRhcmdldCBw
aWNrZXIgYWN0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGls
ZFByb2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01h
Yy5tbQppbmRleCBmMDlmOWIxLi4yOTFhNDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL0NoaWxkUHJvY2Vzc01hYy5tbQpAQCAtOTAsMTMgKzkwLDEzIEBAIHN0YXRpYyBTdHJpbmcg
Y29kZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2VzcyhwaWRfdCBwaWQsIE9TU3RhdHVzJiBlcnJv
ckNvZGUpCiAgICAgUmV0YWluUHRyPFNlY0NvZGVSZWY+IGNvZGVQdHIgPSBhZG9wdENGKGNvZGUp
OwogICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVQdHIpOwogCi0gICAgQ0ZTdHJpbmdSZWYgYXBwbGVT
aWduZWRPck1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50
ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUpIG9yIChhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2Vy
dGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9y
IGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAw
LjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4x
LjEzXSkiKTsKKyAgICBDRlN0cmluZ1JlZiBtYWNBcHBTdG9yZVNpZ25lZE9yQXBwbGVEZXZlbG9w
ZXJTaWduZWRSZXF1aXJlbWVudCA9IENGU1RSKCIoYW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNl
cnRpZmljYXRlIGxlYWZbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYuMS45XSkgb3IgKGFuY2hv
ciBhcHBsZSBnZW5lcmljIGFuZCBjZXJ0aWZpY2F0ZSAxW2ZpZWxkLjEuMi44NDAuMTEzNjM1LjEw
MC42LjIuNl0gYW5kIGNlcnRpZmljYXRlIGxlYWZbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYu
MS4xM10pIik7CiAgICAgU2VjUmVxdWlyZW1lbnRSZWYgc2lnbmluZ1JlcXVpcmVtZW50ID0gbnVs
bHB0cjsKLSAgICBSRUxFQVNFX0FTU0VSVCghU2VjUmVxdWlyZW1lbnRDcmVhdGVXaXRoU3RyaW5n
KGFwcGxlU2lnbmVkT3JNYWNBcHBTdG9yZVNpZ25lZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1
aXJlbWVudCwga1NlY0NTRGVmYXVsdEZsYWdzLCAmc2lnbmluZ1JlcXVpcmVtZW50KSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoIVNlY1JlcXVpcmVtZW50Q3JlYXRlV2l0aFN0cmluZyhtYWNBcHBTdG9y
ZVNpZ25lZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVudCwga1NlY0NTRGVmYXVsdEZs
YWdzLCAmc2lnbmluZ1JlcXVpcmVtZW50KSk7CiAgICAgUmV0YWluUHRyPFNlY1JlcXVpcmVtZW50
UmVmPiBzaWduaW5nUmVxdWlyZW1lbnRQdHIgPSBhZG9wdENGKHNpZ25pbmdSZXF1aXJlbWVudCk7
CiAgICAgZXJyb3JDb2RlID0gU2VjQ29kZUNoZWNrVmFsaWRpdHkoY29kZVB0ci5nZXQoKSwga1Nl
Y0NTRGVmYXVsdEZsYWdzLCBzaWduaW5nUmVxdWlyZW1lbnRQdHIuZ2V0KCkpOwogICAgIGlmIChl
cnJvckNvZGUgPT0gZXJyU2VjQ1NVbnNpZ25lZCB8fCBlcnJvckNvZGUgPT0gZXJyU2VjQ1NSZXFG
YWlsZWQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsgLy8gVW5zaWduZWQgb3Igc2lnbmVkIGJ5
IGEgdGhpcmQtcGFydHkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAvLyBVbnNpZ25lZCwgc2ln
bmVkIGJ5IEFwcGxlLCBvciBzaWduZWQgYnkgYSB0aGlyZC1wYXJ0eQogICAgIGlmIChlcnJvckNv
ZGUgIT0gZXJyU2VjU3VjY2VzcykKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IC8vIGUu
Zy4gaW52YWxpZC9tYWxmb3JtZWQgc2lnbmF0dXJlCiAgICAgU3RyaW5nIGNvZGVTaWduaW5nSWRl
bnRpZmllcjsKLS0gCjIuNy40IChBcHBsZSBHaXQtNjYpCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276180</attachid>
            <date>2016-04-11 15:50:38 -0700</date>
            <delta_ts>2016-04-11 16:17:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156447-20160411155047.patch</filename>
            <type>text/plain</type>
            <size>20786</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDA2NjRjMWMzYmVkODdm
NzBiYTBiYzc5ZjhkNzc2MGFkYmIzNzY2ZC4uMzUyNTZmZDM2Y2Q2MGFmYjgwZTdlMDM2MTFkNDM0
ODRjYjFhM2NmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDM5IEBACiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjE5ODkzMyk6IFVuYWJsZSB0byBsb2dpbiB0byBHb29nbGUgYWNjb3VudCBmcm9tIElu
dGVybmV0IEFjY291bnRzIHByZWZlcmVuY2UgcGFuZQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDQ3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NTY2MTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXZlcnRzIHRoZSB3b3JrYXJvdW5kIGxhbmRlZCBpbiByMTk5MzAxIGFuZCB0ZWFjaGVzIFBy
b2Nlc3NMYXVuY2hlck1hYyB0byB1c2UgdGhlIGNvZGUKKyAgICAgICAgc2lnbmluZyBpZGVudGlm
aWVyIG9mIHRoZSBVSSBwcm9jZXNzIGFzIHRoZSBjbGllbnQtaWRlbnRpZmllciBpZiBpdCBpcyBz
aWduZWQuIE90aGVyd2lzZSwKKyAgICAgICAgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBtYWlu
IGJ1bmRsZSBpZGVudGlmaWVyIG9yIF9OU0dldFByb2duYW1lKCkgZGVwZW5kaW5nIG9uIHdoZXRo
ZXIKKyAgICAgICAgdGhlIFVJIHByb2Nlc3MgaGFzIGFuIGFzc29jaWF0ZWQgYXBwIGJ1bmRsZS4K
KworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nVXRpbGl0aWVzLm1tLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKTog
TW92ZWQgZnJvbSBoZXJlIHRvIGZpbGUgU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5t
bS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmg6IEFkZGVkLgor
ICAgICAgICAqIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW06IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZSk6IEFkZGVkLiBS
ZXR1cm5zIHRoZSBjb2RlIHNpZ25pbmcgaWRlbnRpZmllciBmcm9tIHRoZSBzcGVjaWZpZWQKKyAg
ICAgICAgU2VjQ29kZSBvYmplY3QuIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHJldHJpZXZpbmcg
dGhlIGlkZW50aWZpZXIgdGhlbiBhIG51bGwgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUKKyAg
ICAgICAgY29kZSBzaWduYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZWNDb2RlIG9iamVjdCBp
cyBpbnZhbGlkIG9yIG1hbGZvcm1lZCB0aGVuIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4K
KyAgICAgICAgT3RoZXJ3aXNlLCBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNvZGUgc2ln
bmVkIGJ1bmRsZSBpZGVudGlmaWVyIChmb3IgYW4gYXBwIGJ1bmRsZSkgb3IgdGhlIHNpZ25pbmcK
KyAgICAgICAgaWRlbnRpZmllciAoZm9yIGEgY29tbWFuZCBsaW5lIHRvb2wpIGlzIHJldHVybmVk
LgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBBZGRlZC4gUmV0dXJu
cyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuCisg
ICAgICAgIChXZWJLaXQ6OmNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MpOiBNb3ZlZCBm
cm9tIGZpbGUgU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0uIEV4dHJhY3RlZCBsb2dpYwor
ICAgICAgICBmb3IgcmV0cmlldmluZyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZnJvbSBh
IFNlY0NvZGUgb2JqZWN0IGludG8gaGVscGVyIGZ1bmN0aW9uIFdlYktpdDo6Y29kZVNpZ25pbmdJ
ZGVudGlmaWVyRnJvbVNlY0NvZGUoKQorICAgICAgICBhbmQgbW9kaWZpZWQgdGhpcyBmdW5jdGlv
biB0byBtYWtlIHVzZSBvZiBpdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29ubmVjdFRvU2VydmljZSk6
IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjbGllbnQtaWRlbnRpZmll
ciBpZiB3ZSBoYXZlIG9uZSAoZS5nLgorICAgICAgICB3ZSBhcmUgc2lnbmVkIGFwcCkuIElmIHdl
IGRvIG5vdCBoYXZlIGEgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgdGhlbiB0YWtlIGNsaWVudC1p
ZGVudGlmaWVyIHRvIGJlIHRoZQorICAgICAgICBidW5kbGUgaWRlbnRpZmllciBvZiBvdXIgbWFp
biBidW5kbGUuIEZhaWxpbmcgdGhhdCB3ZSB0YWtlIGNsaWVudC1pZGVudGlmaWVyIHRvIGJlIF9O
U0dldFByb2duYW1lKCkuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLntoLCBtbX0uCisK
KzIwMTYtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAg
IFJFR1JFU1NJT04gKHIxOTg5MzMpOiBVbmFibGUgdG8gbG9naW4gdG8gR29vZ2xlIGFjY291bnQg
ZnJvbSBJbnRlcm5ldCBBY2NvdW50cyBwcmVmZXJlbmNlIHBhbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ0NwogICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjU2MjgxMzM+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhNjJlMTAwOTQ2MjdhZmM1ODZlMzk0MDhmMjNh
OGJhNWJiZTk0N2M0Li42ZmQ1N2E1YWE4MTgyYTJiZjc2MTMyOGUzODU5ZDZkZDcxNWVlMDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMTIyLDYgKzEyMiw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW0KICAg
ICBTaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KICAgICBTaGFyZWQvbWFjL0NoaWxkUHJv
Y2Vzc01hYy5tbQorICAgIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0KICAgICBT
aGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCiAgICAgU2hhcmVkL21hYy9Db29raWVTdG9yYWdl
U2hpbS5tbQogICAgIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQppbmRleCAyOTFhNDQ3
NTkwYzA2YzlhNzIyYTZlNGE2NTIzNDE0MWZlYzE2YzFiLi4zNjY4MTliNGUwYzYzYWViZmQxN2Q0
MGZhZTQzMzYxYWNlMGVjODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L0NoaWxkUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxk
UHJvY2Vzc01hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbXBv
cnQgIkNoaWxkUHJvY2Vzcy5oIgogCisjaW1wb3J0ICJDb2RlU2lnbmluZ1V0aWxpdGllcy5oIgog
I2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgpA
QCAtMzgsNyArMzksNiBAQAogI2ltcG9ydCA8cHdkLmg+CiAjaW1wb3J0IDxzdGRsaWIuaD4KICNp
bXBvcnQgPHN5c2V4aXRzLmg+Ci0jaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KIAogI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCkBAIC03OCwzOSArNzgsNiBAQCB2b2lkIENoaWxkUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1cnJl
bnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlk
LCBPU1N0YXR1cyYgZXJyb3JDb2RlKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlk
Q0ZOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZwaWQpKTsKLSAgICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNH
dWVzdEF0dHJpYnV0ZVBpZCB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51
bWJlci5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2
YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBTZWNDb2RlUmVm
IGNvZGUgPSBudWxscHRyOwotICAgIGlmICgoZXJyb3JDb2RlID0gU2VjQ29kZUNvcHlHdWVzdFdp
dGhBdHRyaWJ1dGVzKG51bGxwdHIsIGF0dHJpYnV0ZXMuZ2V0KCksIGtTZWNDU0RlZmF1bHRGbGFn
cywgJmNvZGUpKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFJldGFpblB0cjxTZWND
b2RlUmVmPiBjb2RlUHRyID0gYWRvcHRDRihjb2RlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb2Rl
UHRyKTsKLQotICAgIENGU3RyaW5nUmVmIG1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3Bl
clNpZ25lZFJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2Vy
dGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9y
IGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAw
LjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4x
LjEzXSkiKTsKLSAgICBTZWNSZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxs
cHRyOwotICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmco
bWFjQXBwU3RvcmVTaWduZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQsIGtTZWND
U0RlZmF1bHRGbGFncywgJnNpZ25pbmdSZXF1aXJlbWVudCkpOwotICAgIFJldGFpblB0cjxTZWNS
ZXF1aXJlbWVudFJlZj4gc2lnbmluZ1JlcXVpcmVtZW50UHRyID0gYWRvcHRDRihzaWduaW5nUmVx
dWlyZW1lbnQpOwotICAgIGVycm9yQ29kZSA9IFNlY0NvZGVDaGVja1ZhbGlkaXR5KGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgc2lnbmluZ1JlcXVpcmVtZW50UHRyLmdldCgpKTsK
LSAgICBpZiAoZXJyb3JDb2RlID09IGVyclNlY0NTVW5zaWduZWQgfHwgZXJyb3JDb2RlID09IGVy
clNlY0NTUmVxRmFpbGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIFVuc2lnbmVkLCBz
aWduZWQgYnkgQXBwbGUsIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5Ci0gICAgaWYgKGVycm9y
Q29kZSAhPSBlcnJTZWNTdWNjZXNzKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsgLy8g
ZS5nLiBpbnZhbGlkL21hbGZvcm1lZCBzaWduYXR1cmUKLSAgICBTdHJpbmcgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyOwotICAgIENGRGljdGlvbmFyeVJlZiBzaWduaW5nSW5mbyA9IG51bGxwdHI7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2lnbmluZ0luZm9ybWF0aW9uKGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdJbmZvKSk7Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc2lnbmluZ0luZm9QdHIgPSBhZG9wdENGKHNpZ25pbmdJbmZvKTsK
LSAgICBpZiAoQ0ZEaWN0aW9uYXJ5UmVmIHBsaXN0ID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWND
b2RlSW5mb1BMaXN0KSkpCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IFN0cmluZyhk
eW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHBsaXN0LCBr
Q0ZCdW5kbGVJZGVudGlmaWVyS2V5KSkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyID0gU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWNDb2RlSW5mb0lkZW50aWZpZXIp
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVTaWduaW5nSWRlbnRpZmllci5pc0VtcHR5KCkp
OwotICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZpZXI7Ci19Ci0KIHZvaWQgQ2hpbGRQcm9j
ZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNh
bmRib3hQYXJhbWV0ZXJzKQogewogICAgIE5TQnVuZGxlICp3ZWJraXQyQnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tWaWV3IildOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyNWU0MGY3MTY5Y2NhNDZhNTg4NzEyZGVjMjc4YTUxMjUzNTZkN2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdHJpbmcgY29k
ZVNpZ25pbmdJZGVudGlmaWVyKE9TU3RhdHVzJiBlcnJvckNvZGUpOworU3RyaW5nIGNvZGVTaWdu
aW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QsIE9TU3RhdHVzJiBlcnJvckNvZGUpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyZmVmMmJlZGZkNTY4MjhkMDY2OGY2
NzdiNDQ5ZGUzMmJlYzA5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVNpZ25pbmdVdGlsaXRpZXMu
aCIKKworI2luY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHNDRi5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworc3RhdGljIFN0cmluZyBjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZShT
ZWNDb2RlUmVmIGNvZGUsIE9TU3RhdHVzJiBlcnJvckNvZGUpCit7CisgICAgQ0ZTdHJpbmdSZWYg
YXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3BlclNpZ25lZFJlcXVp
cmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUpIG9yIChhbmNob3IgYXBwbGUgZ2VuZXJpYyBh
bmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAo
YW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2
MzUuMTAwLjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4x
MDAuNi4xLjEzXSkiKTsKKyAgICBTZWNSZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQg
PSBudWxscHRyOworICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhT
dHJpbmcoYXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3BlclNpZ25l
ZFJlcXVpcmVtZW50LCBrU2VjQ1NEZWZhdWx0RmxhZ3MsICZzaWduaW5nUmVxdWlyZW1lbnQpKTsK
KyAgICBSZXRhaW5QdHI8U2VjUmVxdWlyZW1lbnRSZWY+IHNpZ25pbmdSZXF1aXJlbWVudFB0ciA9
IGFkb3B0Q0Yoc2lnbmluZ1JlcXVpcmVtZW50KTsKKyAgICBlcnJvckNvZGUgPSBTZWNDb2RlQ2hl
Y2tWYWxpZGl0eShjb2RlLCBrU2VjQ1NEZWZhdWx0RmxhZ3MsIHNpZ25pbmdSZXF1aXJlbWVudFB0
ci5nZXQoKSk7CisgICAgaWYgKGVycm9yQ29kZSA9PSBlcnJTZWNDU1Vuc2lnbmVkIHx8IGVycm9y
Q29kZSA9PSBlcnJTZWNDU1JlcUZhaWxlZCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOyAvLyBV
bnNpZ25lZCBvciBzaWduZWQgYnkgYSB0aGlyZC1wYXJ0eQorICAgIGlmIChlcnJvckNvZGUgIT0g
ZXJyU2VjU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7IC8vIGUuZy4gaW52
YWxpZC9tYWxmb3JtZWQgc2lnbmF0dXJlCisgICAgU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmll
cjsKKyAgICBDRkRpY3Rpb25hcnlSZWYgc2lnbmluZ0luZm8gPSBudWxscHRyOworICAgIFJFTEVB
U0VfQVNTRVJUKCFTZWNDb2RlQ29weVNpZ25pbmdJbmZvcm1hdGlvbihjb2RlLCBrU2VjQ1NEZWZh
dWx0RmxhZ3MsICZzaWduaW5nSW5mbykpOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IHNpZ25pbmdJbmZvUHRyID0gYWRvcHRDRihzaWduaW5nSW5mbyk7CisgICAgaWYgKENGRGljdGlv
bmFyeVJlZiBwbGlzdCA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRpY3Rpb25hcnlSZWY+KENGRGljdGlv
bmFyeUdldFZhbHVlKHNpZ25pbmdJbmZvUHRyLmdldCgpLCBrU2VjQ29kZUluZm9QTGlzdCkpKQor
ICAgICAgICBjb2RlU2lnbmluZ0lkZW50aWZpZXIgPSBTdHJpbmcoZHluYW1pY19jZl9jYXN0PENG
U3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbGlzdCwga0NGQnVuZGxlSWRlbnRpZmll
cktleSkpKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IFN0cmlu
ZyhkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHNpZ25p
bmdJbmZvUHRyLmdldCgpLCBrU2VjQ29kZUluZm9JZGVudGlmaWVyKSkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFjb2RlU2lnbmluZ0lkZW50aWZpZXIuaXNFbXB0eSgpKTsKKyAgICByZXR1cm4gY29k
ZVNpZ25pbmdJZGVudGlmaWVyOworfQorICAgIAorU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmll
cihPU1N0YXR1cyYgZXJyb3JDb2RlKQoreworICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7
CisgICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2RlQ29weVNlbGYoa1NlY0NTRGVmYXVsdEZsYWdz
LCAmY29kZSkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPFNlY0Nv
ZGVSZWY+IGNvZGVQdHIgPSBhZG9wdENGKGNvZGUpOworICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVQ
dHIpOworICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZShjb2RlUHRy
LmdldCgpLCBlcnJvckNvZGUpOworfQorCitTdHJpbmcgY29kZVNpZ25pbmdJZGVudGlmaWVyRm9y
UHJvY2VzcyhwaWRfdCBwaWQsIE9TU3RhdHVzJiBlcnJvckNvZGUpCit7CisgICAgUmV0YWluUHRy
PENGTnVtYmVyUmVmPiBwaWRDRk51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnBpZCkpOworICAgIGNvbnN0IHZvaWQq
IGtleXNbXSA9IHsga1NlY0d1ZXN0QXR0cmlidXRlUGlkIH07CisgICAgY29uc3Qgdm9pZCogdmFs
dWVzW10gPSB7IHBpZENGTnVtYmVyLmdldCgpIH07CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7CisgICAgaWYgKChlcnJvckNvZGUgPSBT
ZWNDb2RlQ29weUd1ZXN0V2l0aEF0dHJpYnV0ZXMobnVsbHB0ciwgYXR0cmlidXRlcy5nZXQoKSwg
a1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgUmV0YWluUHRyPFNlY0NvZGVSZWY+IGNvZGVQdHIgPSBhZG9wdENGKGNvZGUpOworICAgIFJF
TEVBU0VfQVNTRVJUKGNvZGVQdHIpOworICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZpZXJG
cm9tU2VjQ29kZShjb2RlUHRyLmdldCgpLCBlcnJvckNvZGUpOworfQorICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNo
ZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCmluZGV4IDkyNmIxOTBlMDJmMzlhNWI0
ZGY5ZjM2YjZlZTkyYWUyZTRhYjVlMDQuLmYyMDUzNzYxMTE5MDYxOTRlYWViZTFlYjk0MmU5NzVi
OWRiZjRjNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9tYWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCkBAIC0yNiw2ICsyNiw3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlByb2Nlc3NMYXVuY2hlci5oIgogCisjaW1wb3J0ICJD
b2RlU2lnbmluZ1V0aWxpdGllcy5oIgogI2ltcG9ydCA8V2ViQ29yZS9DRkJ1bmRsZVNQSS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TZXJ2ZXJzU1BJLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRMaW5r
aW5nLmg+CkBAIC0xMzYsOCArMTM3LDEzIEBAIHN0YXRpYyB2b2lkIGNvbm5lY3RUb1NlcnZpY2Uo
Y29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zCiAgICAg
Ly8gSW5zZXJ0IGEgc2VuZCByaWdodCBzbyB3ZSBjYW4gc2VuZCB0byBpdC4KICAgICBtYWNoX3Bv
cnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQsIGxpc3Rlbmlu
Z1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKTsKIAotICAgIE5TU3RyaW5nICpidW5kbGVJ
ZGVudGlmaWVyID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXTsKLSAg
ICBDU3RyaW5nIGNsaWVudElkZW50aWZpZXIgPSBidW5kbGVJZGVudGlmaWVyID8gU3RyaW5nKFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pLnV0ZjgoKSA6ICpfTlNHZXRQ
cm9nbmFtZSgpOworICAgIE9TU3RhdHVzIGVycm9yID0gMDsKKyAgICBTdHJpbmcgY2xpZW50SWRl
bnRpZmllciA9IFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVyKGVycm9yKTsKKyAgICBib29s
IGlzQ29kZVNpZ25lZCA9ICFjbGllbnRJZGVudGlmaWVyLmlzTnVsbCgpOworICAgIGlmIChpc0Nv
ZGVTaWduZWQgJiYgZXJyb3IpCisgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IHRvIGdl
dCBjb2RlIHNpZ25pbmcgaWRlbnRpZmllcjogJWxkXG4iLCBzdGF0aWNfY2FzdDxsb25nPihlcnJv
cikpOworICAgIGlmIChjbGllbnRJZGVudGlmaWVyLmlzRW1wdHkoKSkKKyAgICAgICAgY2xpZW50
SWRlbnRpZmllciA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl07CiAK
ICAgICAvLyBGSVhNRTogU3dpdGNoIHRvIHhwY19jb25uZWN0aW9uX3NldF9ib290c3RyYXAgb25j
ZSBpdCdzIGF2YWlsYWJsZSBldmVyeXdoZXJlIHdlIG5lZWQuCiAgICAgYXV0byBib290c3RyYXBN
ZXNzYWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVs
bHB0ciwgMCkpOwpAQCAtMTQ2LDcgKzE1Miw3IEBAIHN0YXRpYyB2b2lkIGNvbm5lY3RUb1NlcnZp
Y2UoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuY2hPcHRpb25zCiAg
ICAgeHBjX2RpY3Rpb25hcnlfc2V0X21hY2hfc2VuZChib290c3RyYXBNZXNzYWdlLmdldCgpLCAi
c2VydmVyLXBvcnQiLCBsaXN0ZW5pbmdQb3J0KTsKICAgICBtYWNoX3BvcnRfZGVhbGxvY2F0ZSht
YWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0KTsKIAotICAgIHhwY19kaWN0aW9uYXJ5X3Nl
dF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNsaWVudC1pZGVudGlmaWVyIiwgY2xp
ZW50SWRlbnRpZmllci5kYXRhKCkpOworICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9v
dHN0cmFwTWVzc2FnZS5nZXQoKSwgImNsaWVudC1pZGVudGlmaWVyIiwgIWNsaWVudElkZW50aWZp
ZXIuaXNFbXB0eSgpID8gY2xpZW50SWRlbnRpZmllci51dGY4KCkuZGF0YSgpIDogKl9OU0dldFBy
b2duYW1lKCkpOwogICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2Fn
ZS5nZXQoKSwgInVpLXByb2Nlc3MtbmFtZSIsIFtbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9d
IHByb2Nlc3NOYW1lXSBVVEY4U3RyaW5nXSk7CiAKICAgICBpZiAoZm9yRGV2ZWxvcG1lbnQpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA0ZGE1NzFlYTA2NGM0NDkyOTkyZGQzOGY4ODdmZTU1MjQwYTlmYWIyLi4yOTdkMmE5MzMx
ZjUzNWE5MGM3MDg5ZjRlYzAwOTU4N2Y1MjEzMWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzExLDYgKzE3MTEsOCBAQAog
CQlDREMzODMxMDE3MjEyNDQwMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW0ubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREMzODMwRDE3MjEyNDJE
MDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW0ubW0gKi87IH07CiAJCUNEQ0E4NUM4MTMyQUJB
NEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQTg1QzYxMzJBQkE0RTAwRTk2
MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gKi87IH07CiAJCUNEQ0E4NUM5
MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVDNzEzMkFCQTRF
MDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oICovOyB9OworCQlDRTEx
QUQ1MDFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTExQUQ0RjFDQkM0N0Y4MDA2
ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gKi87IH07CisJCUNFMTFBRDUyMUNCQzQ4
MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxMUFENTExQ0JDNDgyRjAwNjgxRUU1IC8qIENv
ZGVTaWduaW5nVXRpbGl0aWVzLmggKi87IH07CiAJCUNFMUEwQkQyMUE0OEU2QzYwMDU0RUY3NCAv
KiBBc3NlcnRpb25TZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0UxQTBCQ0MxQTQ4RTZDNjAwNTRFRjc0IC8qIEFzc2VydGlvblNlcnZp
Y2VzU1BJLmggKi87IH07CiAJCUNFMUEwQkQzMUE0OEU2QzYwMDU0RUY3NCAvKiBDb3JlUERGU1BJ
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTFBMEJD
RDFBNDhFNkM2MDA1NEVGNzQgLyogQ29yZVBERlNQSS5oICovOyB9OwogCQlDRTFBMEJENDFBNDhF
NkM2MDA1NEVGNzQgLyogRGF0YURldGVjdG9yc1VJU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTFBMEJDRTFBNDhFNkM2MDA1NEVGNzQgLyogRGF0
YURldGVjdG9yc1VJU1BJLmggKi87IH07CkBAIC0zNzg2LDYgKzM3ODgsOCBAQAogCQlDRENBODVD
NjEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0E4NUM3MTMyQUJB
NEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDQTg1RDQxMzJBQzJCMzAwRTk2MURGIC8qIElP
S2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRoID0g
L1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0g
IjxhYnNvbHV0ZT4iOyB9OworCQlDRTExQUQ0RjFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25p
bmdVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBD
b2RlU2lnbmluZ1V0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0Ux
MUFENTExQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nVXRpbGl0aWVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTaWduaW5nVXRpbGl0aWVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMUEwQkNDMUE0OEU2QzYwMDU0RUY3NCAvKiBBc3NlcnRp
b25TZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NlcnRp
b25TZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRTFBMEJDRDFB
NDhFNkM2MDA1NEVGNzQgLyogQ29yZVBERlNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb3JlUERGU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMUEw
QkNFMUE0OEU2QzYwMDU0RUY3NCAvKiBEYXRhRGV0ZWN0b3JzVUlTUEkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9yc1VJU1BJLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02MjIzLDYgKzYyMjcsOCBAQAogCQkJCUUxQTMxNzMxMTM0Q0VBNkMw
MDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8sCiAJCQkJRTFBMzE3MzQxMzRDRUE4MDAw
N0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi8sCiAJCQkJOUY1NEY4OEUxNjQ4OEU4NzAw
N0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSAqLywKKwkJCQlDRTExQUQ1MTFDQkM0ODJGMDA2
ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMuaCAqLywKKwkJCQlDRTExQUQ0RjFDQkM0N0Y4
MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gKi8sCiAJCQkJMUEyQTRBRkUxNTg2
OTM5MjAwOTBDOUU5IC8qIENvbG9yU3BhY2VEYXRhLmggKi8sCiAJCQkJMUEyQTRBRkQxNTg2OTM5
MjAwOTBDOUU5IC8qIENvbG9yU3BhY2VEYXRhLm1tICovLAogCQkJCUNEQzM4MzBFMTcyMTI0MkQw
MDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbS5oICovLApAQCAtNzMxOSw2ICs3MzI1LDcgQEAK
IAkJCQk1MUZBRUMzQTFCMDY1NzYzMDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUUxNTEzQzY3MTY2RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nl
c3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjkwRjQyNzIxNzJBMEM3NDAwOTM5RkYwIC8q
IENoaWxkUHJvY2Vzc1N1cHBsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFMTFBRDUyMUNC
QzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUE2RjlGOTAxMUUxM0VGQzAwREIxMzcxIC8qIENvbW1hbmRMaW5lLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzN0JFQzRFMTE5NDkxNDg2MDA4QjQyODYgLyogQ29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNEU5RjYxMzFDNkU3RTAwMjlCRDVBIC8q
IGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzYxLDYgKzg3NjgsNyBAQAogCQkJCTlGNTRG
ODhGMTY0ODhFODcwMDdERjgxQSAvKiBDaGlsZFByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAqLywK
IAkJCQk1MUZBRUMzQjFCMDY1NzY4MDAwOUM0RTcgLyogQ2hpbGRQcm9jZXNzTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNTEzQzY2MTY2RUFCQjIwMDE0OUZDQiAvKiBD
aGlsZFByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlDRTExQUQ1MDFDQkM0N0Y4
MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QTJBNEIwRTE1ODZBMjI0MDA5MEM5RTkgLyogQ29sb3JTcGFjZURhdGEubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxQTZGOUZCNzExRTE0MDg1MDBEQjEzNzEgLyogQ29tbWFuZExpbmVQT1NJWC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzN0JFQzRFMDE5NDkxNDg2MDA4QjQyODYgLyogQ29tcGxldGlv
bkhhbmRsZXJDYWxsQ2hlY2tlci5tbSBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276185</attachid>
            <date>2016-04-11 16:17:37 -0700</date>
            <delta_ts>2016-04-11 16:40:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156447-20160411161746.patch</filename>
            <type>text/plain</type>
            <size>20836</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDA2NjRjMWMzYmVkODdm
NzBiYTBiYzc5ZjhkNzc2MGFkYmIzNzY2ZC4uMzUyNTZmZDM2Y2Q2MGFmYjgwZTdlMDM2MTFkNDM0
ODRjYjFhM2NmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDM5IEBACiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjE5ODkzMyk6IFVuYWJsZSB0byBsb2dpbiB0byBHb29nbGUgYWNjb3VudCBmcm9tIElu
dGVybmV0IEFjY291bnRzIHByZWZlcmVuY2UgcGFuZQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDQ3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NTY2MTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXZlcnRzIHRoZSB3b3JrYXJvdW5kIGxhbmRlZCBpbiByMTk5MzAxIGFuZCB0ZWFjaGVzIFBy
b2Nlc3NMYXVuY2hlck1hYyB0byB1c2UgdGhlIGNvZGUKKyAgICAgICAgc2lnbmluZyBpZGVudGlm
aWVyIG9mIHRoZSBVSSBwcm9jZXNzIGFzIHRoZSBjbGllbnQtaWRlbnRpZmllciBpZiBpdCBpcyBz
aWduZWQuIE90aGVyd2lzZSwKKyAgICAgICAgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBtYWlu
IGJ1bmRsZSBpZGVudGlmaWVyIG9yIF9OU0dldFByb2duYW1lKCkgZGVwZW5kaW5nIG9uIHdoZXRo
ZXIKKyAgICAgICAgdGhlIFVJIHByb2Nlc3MgaGFzIGFuIGFzc29jaWF0ZWQgYXBwIGJ1bmRsZS4K
KworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nVXRpbGl0aWVzLm1tLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKTog
TW92ZWQgZnJvbSBoZXJlIHRvIGZpbGUgU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5t
bS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmg6IEFkZGVkLgor
ICAgICAgICAqIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW06IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZSk6IEFkZGVkLiBS
ZXR1cm5zIHRoZSBjb2RlIHNpZ25pbmcgaWRlbnRpZmllciBmcm9tIHRoZSBzcGVjaWZpZWQKKyAg
ICAgICAgU2VjQ29kZSBvYmplY3QuIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHJldHJpZXZpbmcg
dGhlIGlkZW50aWZpZXIgdGhlbiBhIG51bGwgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUKKyAg
ICAgICAgY29kZSBzaWduYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZWNDb2RlIG9iamVjdCBp
cyBpbnZhbGlkIG9yIG1hbGZvcm1lZCB0aGVuIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4K
KyAgICAgICAgT3RoZXJ3aXNlLCBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNvZGUgc2ln
bmVkIGJ1bmRsZSBpZGVudGlmaWVyIChmb3IgYW4gYXBwIGJ1bmRsZSkgb3IgdGhlIHNpZ25pbmcK
KyAgICAgICAgaWRlbnRpZmllciAoZm9yIGEgY29tbWFuZCBsaW5lIHRvb2wpIGlzIHJldHVybmVk
LgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBBZGRlZC4gUmV0dXJu
cyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuCisg
ICAgICAgIChXZWJLaXQ6OmNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MpOiBNb3ZlZCBm
cm9tIGZpbGUgU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0uIEV4dHJhY3RlZCBsb2dpYwor
ICAgICAgICBmb3IgcmV0cmlldmluZyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZnJvbSBh
IFNlY0NvZGUgb2JqZWN0IGludG8gaGVscGVyIGZ1bmN0aW9uIFdlYktpdDo6Y29kZVNpZ25pbmdJ
ZGVudGlmaWVyRnJvbVNlY0NvZGUoKQorICAgICAgICBhbmQgbW9kaWZpZWQgdGhpcyBmdW5jdGlv
biB0byBtYWtlIHVzZSBvZiBpdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29ubmVjdFRvU2VydmljZSk6
IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjbGllbnQtaWRlbnRpZmll
ciBpZiB3ZSBoYXZlIG9uZSAoZS5nLgorICAgICAgICB3ZSBhcmUgc2lnbmVkIGFwcCkuIElmIHdl
IGRvIG5vdCBoYXZlIGEgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgdGhlbiB0YWtlIGNsaWVudC1p
ZGVudGlmaWVyIHRvIGJlIHRoZQorICAgICAgICBidW5kbGUgaWRlbnRpZmllciBvZiBvdXIgbWFp
biBidW5kbGUuIEZhaWxpbmcgdGhhdCB3ZSB0YWtlIGNsaWVudC1pZGVudGlmaWVyIHRvIGJlIF9O
U0dldFByb2duYW1lKCkuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLntoLCBtbX0uCisK
KzIwMTYtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAg
IFJFR1JFU1NJT04gKHIxOTg5MzMpOiBVbmFibGUgdG8gbG9naW4gdG8gR29vZ2xlIGFjY291bnQg
ZnJvbSBJbnRlcm5ldCBBY2NvdW50cyBwcmVmZXJlbmNlIHBhbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ0NwogICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjU2MjgxMzM+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhNjJlMTAwOTQ2MjdhZmM1ODZlMzk0MDhmMjNh
OGJhNWJiZTk0N2M0Li42ZmQ1N2E1YWE4MTgyYTJiZjc2MTMyOGUzODU5ZDZkZDcxNWVlMDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMTIyLDYgKzEyMiw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW0KICAg
ICBTaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KICAgICBTaGFyZWQvbWFjL0NoaWxkUHJv
Y2Vzc01hYy5tbQorICAgIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0KICAgICBT
aGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCiAgICAgU2hhcmVkL21hYy9Db29raWVTdG9yYWdl
U2hpbS5tbQogICAgIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQppbmRleCAyOTFhNDQ3
NTkwYzA2YzlhNzIyYTZlNGE2NTIzNDE0MWZlYzE2YzFiLi4zNjY4MTliNGUwYzYzYWViZmQxN2Q0
MGZhZTQzMzYxYWNlMGVjODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L0NoaWxkUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxk
UHJvY2Vzc01hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbXBv
cnQgIkNoaWxkUHJvY2Vzcy5oIgogCisjaW1wb3J0ICJDb2RlU2lnbmluZ1V0aWxpdGllcy5oIgog
I2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgpA
QCAtMzgsNyArMzksNiBAQAogI2ltcG9ydCA8cHdkLmg+CiAjaW1wb3J0IDxzdGRsaWIuaD4KICNp
bXBvcnQgPHN5c2V4aXRzLmg+Ci0jaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KIAogI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCkBAIC03OCwzOSArNzgsNiBAQCB2b2lkIENoaWxkUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1cnJl
bnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlk
LCBPU1N0YXR1cyYgZXJyb3JDb2RlKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlk
Q0ZOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZwaWQpKTsKLSAgICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNH
dWVzdEF0dHJpYnV0ZVBpZCB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51
bWJlci5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2
YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBTZWNDb2RlUmVm
IGNvZGUgPSBudWxscHRyOwotICAgIGlmICgoZXJyb3JDb2RlID0gU2VjQ29kZUNvcHlHdWVzdFdp
dGhBdHRyaWJ1dGVzKG51bGxwdHIsIGF0dHJpYnV0ZXMuZ2V0KCksIGtTZWNDU0RlZmF1bHRGbGFn
cywgJmNvZGUpKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFJldGFpblB0cjxTZWND
b2RlUmVmPiBjb2RlUHRyID0gYWRvcHRDRihjb2RlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb2Rl
UHRyKTsKLQotICAgIENGU3RyaW5nUmVmIG1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3Bl
clNpZ25lZFJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2Vy
dGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9y
IGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAw
LjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4x
LjEzXSkiKTsKLSAgICBTZWNSZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxs
cHRyOwotICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmco
bWFjQXBwU3RvcmVTaWduZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQsIGtTZWND
U0RlZmF1bHRGbGFncywgJnNpZ25pbmdSZXF1aXJlbWVudCkpOwotICAgIFJldGFpblB0cjxTZWNS
ZXF1aXJlbWVudFJlZj4gc2lnbmluZ1JlcXVpcmVtZW50UHRyID0gYWRvcHRDRihzaWduaW5nUmVx
dWlyZW1lbnQpOwotICAgIGVycm9yQ29kZSA9IFNlY0NvZGVDaGVja1ZhbGlkaXR5KGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgc2lnbmluZ1JlcXVpcmVtZW50UHRyLmdldCgpKTsK
LSAgICBpZiAoZXJyb3JDb2RlID09IGVyclNlY0NTVW5zaWduZWQgfHwgZXJyb3JDb2RlID09IGVy
clNlY0NTUmVxRmFpbGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIFVuc2lnbmVkLCBz
aWduZWQgYnkgQXBwbGUsIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5Ci0gICAgaWYgKGVycm9y
Q29kZSAhPSBlcnJTZWNTdWNjZXNzKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsgLy8g
ZS5nLiBpbnZhbGlkL21hbGZvcm1lZCBzaWduYXR1cmUKLSAgICBTdHJpbmcgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyOwotICAgIENGRGljdGlvbmFyeVJlZiBzaWduaW5nSW5mbyA9IG51bGxwdHI7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2lnbmluZ0luZm9ybWF0aW9uKGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdJbmZvKSk7Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc2lnbmluZ0luZm9QdHIgPSBhZG9wdENGKHNpZ25pbmdJbmZvKTsK
LSAgICBpZiAoQ0ZEaWN0aW9uYXJ5UmVmIHBsaXN0ID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWND
b2RlSW5mb1BMaXN0KSkpCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IFN0cmluZyhk
eW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHBsaXN0LCBr
Q0ZCdW5kbGVJZGVudGlmaWVyS2V5KSkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyID0gU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWNDb2RlSW5mb0lkZW50aWZpZXIp
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVTaWduaW5nSWRlbnRpZmllci5pc0VtcHR5KCkp
OwotICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZpZXI7Ci19Ci0KIHZvaWQgQ2hpbGRQcm9j
ZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNh
bmRib3hQYXJhbWV0ZXJzKQogewogICAgIE5TQnVuZGxlICp3ZWJraXQyQnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tWaWV3IildOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyNWU0MGY3MTY5Y2NhNDZhNTg4NzEyZGVjMjc4YTUxMjUzNTZkN2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdHJpbmcgY29k
ZVNpZ25pbmdJZGVudGlmaWVyKE9TU3RhdHVzJiBlcnJvckNvZGUpOworU3RyaW5nIGNvZGVTaWdu
aW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QsIE9TU3RhdHVzJiBlcnJvckNvZGUpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZDZhMjBhZGIwMjNiMzg2ZjNmZDg5
NmI5MzBhNDBmOGUwZmRkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVNpZ25pbmdVdGlsaXRpZXMu
aCIKKworI2lmICFQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxTZWN1cml0eS9TZWN1cml0eS5o
PgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvY2YvVHlwZUNhc3Rz
Q0YuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBTdHJpbmcgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyRnJvbVNlY0NvZGUoU2VjQ29kZVJlZiBjb2RlLCBPU1N0YXR1cyYgZXJyb3JDb2Rl
KQoreworICAgIENGU3RyaW5nUmVmIGFwcGxlU2lnbmVkT3JNYWNBcHBTdG9yZVNpZ25lZE9yQXBw
bGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVudCA9IENGU1RSKCIoYW5jaG9yIGFwcGxlKSBvciAo
YW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIGxlYWZbZmllbGQuMS4yLjg0MC4x
MTM2MzUuMTAwLjYuMS45XSkgb3IgKGFuY2hvciBhcHBsZSBnZW5lcmljIGFuZCBjZXJ0aWZpY2F0
ZSAxW2ZpZWxkLjEuMi44NDAuMTEzNjM1LjEwMC42LjIuNl0gYW5kIGNlcnRpZmljYXRlIGxlYWZb
ZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYuMS4xM10pIik7CisgICAgU2VjUmVxdWlyZW1lbnRS
ZWYgc2lnbmluZ1JlcXVpcmVtZW50ID0gbnVsbHB0cjsKKyAgICBSRUxFQVNFX0FTU0VSVCghU2Vj
UmVxdWlyZW1lbnRDcmVhdGVXaXRoU3RyaW5nKGFwcGxlU2lnbmVkT3JNYWNBcHBTdG9yZVNpZ25l
ZE9yQXBwbGVEZXZlbG9wZXJTaWduZWRSZXF1aXJlbWVudCwga1NlY0NTRGVmYXVsdEZsYWdzLCAm
c2lnbmluZ1JlcXVpcmVtZW50KSk7CisgICAgUmV0YWluUHRyPFNlY1JlcXVpcmVtZW50UmVmPiBz
aWduaW5nUmVxdWlyZW1lbnRQdHIgPSBhZG9wdENGKHNpZ25pbmdSZXF1aXJlbWVudCk7CisgICAg
ZXJyb3JDb2RlID0gU2VjQ29kZUNoZWNrVmFsaWRpdHkoY29kZSwga1NlY0NTRGVmYXVsdEZsYWdz
LCBzaWduaW5nUmVxdWlyZW1lbnRQdHIuZ2V0KCkpOworICAgIGlmIChlcnJvckNvZGUgPT0gZXJy
U2VjQ1NVbnNpZ25lZCB8fCBlcnJvckNvZGUgPT0gZXJyU2VjQ1NSZXFGYWlsZWQpCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsgLy8gVW5zaWduZWQgb3Igc2lnbmVkIGJ5IGEgdGhpcmQtcGFydHkK
KyAgICBpZiAoZXJyb3JDb2RlICE9IGVyclNlY1N1Y2Nlc3MpCisgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOyAvLyBlLmcuIGludmFsaWQvbWFsZm9ybWVkIHNpZ25hdHVyZQorICAgIFN0cmlu
ZyBjb2RlU2lnbmluZ0lkZW50aWZpZXI7CisgICAgQ0ZEaWN0aW9uYXJ5UmVmIHNpZ25pbmdJbmZv
ID0gbnVsbHB0cjsKKyAgICBSRUxFQVNFX0FTU0VSVCghU2VjQ29kZUNvcHlTaWduaW5nSW5mb3Jt
YXRpb24oY29kZSwga1NlY0NTRGVmYXVsdEZsYWdzLCAmc2lnbmluZ0luZm8pKTsKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBzaWduaW5nSW5mb1B0ciA9IGFkb3B0Q0Yoc2lnbmluZ0lu
Zm8pOworICAgIGlmIChDRkRpY3Rpb25hcnlSZWYgcGxpc3QgPSBkeW5hbWljX2NmX2Nhc3Q8Q0ZE
aWN0aW9uYXJ5UmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShzaWduaW5nSW5mb1B0ci5nZXQoKSwg
a1NlY0NvZGVJbmZvUExpc3QpKSkKKyAgICAgICAgY29kZVNpZ25pbmdJZGVudGlmaWVyID0gU3Ry
aW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUocGxp
c3QsIGtDRkJ1bmRsZUlkZW50aWZpZXJLZXkpKSk7CisgICAgZWxzZQorICAgICAgICBjb2RlU2ln
bmluZ0lkZW50aWZpZXIgPSBTdHJpbmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRp
Y3Rpb25hcnlHZXRWYWx1ZShzaWduaW5nSW5mb1B0ci5nZXQoKSwga1NlY0NvZGVJbmZvSWRlbnRp
ZmllcikpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghY29kZVNpZ25pbmdJZGVudGlmaWVyLmlzRW1w
dHkoKSk7CisgICAgcmV0dXJuIGNvZGVTaWduaW5nSWRlbnRpZmllcjsKK30KKyAgICAKK1N0cmlu
ZyBjb2RlU2lnbmluZ0lkZW50aWZpZXIoT1NTdGF0dXMmIGVycm9yQ29kZSkKK3sKKyAgICBTZWND
b2RlUmVmIGNvZGUgPSBudWxscHRyOworICAgIGlmICgoZXJyb3JDb2RlID0gU2VjQ29kZUNvcHlT
ZWxmKGtTZWNDU0RlZmF1bHRGbGFncywgJmNvZGUpKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgIFJldGFpblB0cjxTZWNDb2RlUmVmPiBjb2RlUHRyID0gYWRvcHRDRihjb2RlKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChjb2RlUHRyKTsKKyAgICByZXR1cm4gY29kZVNpZ25pbmdJZGVudGlm
aWVyRnJvbVNlY0NvZGUoY29kZVB0ci5nZXQoKSwgZXJyb3JDb2RlKTsKK30KKworU3RyaW5nIGNv
ZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlkLCBPU1N0YXR1cyYgZXJyb3JD
b2RlKQoreworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlkQ0ZOdW1iZXIgPSBhZG9wdENG
KENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZw
aWQpKTsKKyAgICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNHdWVzdEF0dHJpYnV0ZVBpZCB9
OworICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51bWJlci5nZXQoKSB9OworICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9M
RU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBTZWNDb2RlUmVmIGNvZGUgPSBudWxscHRyOwor
ICAgIGlmICgoZXJyb3JDb2RlID0gU2VjQ29kZUNvcHlHdWVzdFdpdGhBdHRyaWJ1dGVzKG51bGxw
dHIsIGF0dHJpYnV0ZXMuZ2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgJmNvZGUpKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxTZWNDb2RlUmVmPiBjb2RlUHRyID0g
YWRvcHRDRihjb2RlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChjb2RlUHRyKTsKKyAgICByZXR1cm4g
Y29kZVNpZ25pbmdJZGVudGlmaWVyRnJvbVNlY0NvZGUoY29kZVB0ci5nZXQoKSwgZXJyb3JDb2Rl
KTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gIVBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMv
UHJvY2Vzc0xhdW5jaGVyTWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0KaW5kZXggOTI2YjE5MGUwMmYzOWE1YjRkZjlmMzZi
NmVlOTJhZTJlNGFiNWUwNC4uZjIwNTM3NjExMTkwNjE5NGVhZWJlMWViOTQyZTk3NWI5ZGJmNGM1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9j
ZXNzTGF1bmNoZXJNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0KQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNv
bmZpZy5oIgogI2ltcG9ydCAiUHJvY2Vzc0xhdW5jaGVyLmgiCiAKKyNpbXBvcnQgIkNvZGVTaWdu
aW5nVXRpbGl0aWVzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NGQnVuZGxlU1BJLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NlcnZlcnNTUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvU29mdExpbmtpbmcuaD4K
QEAgLTEzNiw4ICsxMzcsMTMgQEAgc3RhdGljIHZvaWQgY29ubmVjdFRvU2VydmljZShjb25zdCBQ
cm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMKICAgICAvLyBJbnNl
cnQgYSBzZW5kIHJpZ2h0IHNvIHdlIGNhbiBzZW5kIHRvIGl0LgogICAgIG1hY2hfcG9ydF9pbnNl
cnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgbGlzdGVuaW5nUG9ydCwgbGlzdGVuaW5nUG9ydCwg
TUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpOwogCi0gICAgTlNTdHJpbmcgKmJ1bmRsZUlkZW50aWZp
ZXIgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOwotICAgIENTdHJp
bmcgY2xpZW50SWRlbnRpZmllciA9IGJ1bmRsZUlkZW50aWZpZXIgPyBTdHJpbmcoW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXSkudXRmOCgpIDogKl9OU0dldFByb2duYW1l
KCk7CisgICAgT1NTdGF0dXMgZXJyb3IgPSAwOworICAgIFN0cmluZyBjbGllbnRJZGVudGlmaWVy
ID0gV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIoZXJyb3IpOworICAgIGJvb2wgaXNDb2Rl
U2lnbmVkID0gIWNsaWVudElkZW50aWZpZXIuaXNOdWxsKCk7CisgICAgaWYgKGlzQ29kZVNpZ25l
ZCAmJiBlcnJvcikKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJDb3VsZCBub3QgdG8gZ2V0IGNvZGUg
c2lnbmluZyBpZGVudGlmaWVyOiAlbGRcbiIsIHN0YXRpY19jYXN0PGxvbmc+KGVycm9yKSk7Cisg
ICAgaWYgKGNsaWVudElkZW50aWZpZXIuaXNFbXB0eSgpKQorICAgICAgICBjbGllbnRJZGVudGlm
aWVyID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXTsKIAogICAgIC8v
IEZJWE1FOiBTd2l0Y2ggdG8geHBjX2Nvbm5lY3Rpb25fc2V0X2Jvb3RzdHJhcCBvbmNlIGl0J3Mg
YXZhaWxhYmxlIGV2ZXJ5d2hlcmUgd2UgbmVlZC4KICAgICBhdXRvIGJvb3RzdHJhcE1lc3NhZ2Ug
PSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShudWxscHRyLCBudWxscHRyLCAw
KSk7CkBAIC0xNDYsNyArMTUyLDcgQEAgc3RhdGljIHZvaWQgY29ubmVjdFRvU2VydmljZShjb25z
dCBQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jaE9wdGlvbnMKICAgICB4cGNf
ZGljdGlvbmFyeV9zZXRfbWFjaF9zZW5kKGJvb3RzdHJhcE1lc3NhZ2UuZ2V0KCksICJzZXJ2ZXIt
cG9ydCIsIGxpc3RlbmluZ1BvcnQpOwogICAgIG1hY2hfcG9ydF9kZWFsbG9jYXRlKG1hY2hfdGFz
a19zZWxmKCksIGxpc3RlbmluZ1BvcnQpOwogCi0gICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmlu
Zyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LWlkZW50aWZpZXIiLCBjbGllbnRJZGVu
dGlmaWVyLmRhdGEoKSk7CisgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290c3RyYXBN
ZXNzYWdlLmdldCgpLCAiY2xpZW50LWlkZW50aWZpZXIiLCAhY2xpZW50SWRlbnRpZmllci5pc0Vt
cHR5KCkgPyBjbGllbnRJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkgOiAqX05TR2V0UHJvZ25hbWUo
KSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgp
LCAidWktcHJvY2Vzcy1uYW1lIiwgW1tbTlNQcm9jZXNzSW5mbyBwcm9jZXNzSW5mb10gcHJvY2Vz
c05hbWVdIFVURjhTdHJpbmddKTsKIAogICAgIGlmIChmb3JEZXZlbG9wbWVudCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDRk
YTU3MWVhMDY0YzQ0OTI5OTJkZDM4Zjg4N2ZlNTUyNDBhOWZhYjIuLjI5N2QyYTkzMzFmNTM1YTkw
YzcwODlmNGVjMDA5NTg3ZjUyMTMxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktp
dDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MTEsNiArMTcxMSw4IEBACiAJCUNEQzM4
MzEwMTcyMTI0NDAwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbS5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4MzBEMTcyMTI0MkQwMDhBMkZD
MyAvKiBDb29raWVTdG9yYWdlU2hpbS5tbSAqLzsgfTsKIAkJQ0RDQTg1QzgxMzJBQkE0RTAwRTk2
MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVDNjEzMkFCQTRFMDBFOTYxREYgLyog
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJQ0RDQTg1QzkxMzJBQkE0
RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0E4NUM3MTMyQUJBNEUwMEU5NjFE
RiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggKi87IH07CisJCUNFMTFBRDUwMUNC
QzQ3RjgwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMTFBRDRGMUNCQzQ3RjgwMDY4MUVFNSAv
KiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSAqLzsgfTsKKwkJQ0UxMUFENTIxQ0JDNDgyRjAwNjgx
RUU1IC8qIENvZGVTaWduaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDRTExQUQ1MTFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25p
bmdVdGlsaXRpZXMuaCAqLzsgfTsKIAkJQ0UxQTBCRDIxQTQ4RTZDNjAwNTRFRjc0IC8qIEFzc2Vy
dGlvblNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRTFBMEJDQzFBNDhFNkM2MDA1NEVGNzQgLyogQXNzZXJ0aW9uU2VydmljZXNTUEku
aCAqLzsgfTsKIAkJQ0UxQTBCRDMxQTQ4RTZDNjAwNTRFRjc0IC8qIENvcmVQREZTUEkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMUEwQkNEMUE0OEU2
QzYwMDU0RUY3NCAvKiBDb3JlUERGU1BJLmggKi87IH07CiAJCUNFMUEwQkQ0MUE0OEU2QzYwMDU0
RUY3NCAvKiBEYXRhRGV0ZWN0b3JzVUlTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IENFMUEwQkNFMUE0OEU2QzYwMDU0RUY3NCAvKiBEYXRhRGV0ZWN0
b3JzVUlTUEkuaCAqLzsgfTsKQEAgLTM3ODYsNiArMzc4OCw4IEBACiAJCUNEQ0E4NUM2MTMyQUJB
NEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDQTg1QzcxMzJBQkE0RTAwRTk2
MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDRENBODVENDEzMkFDMkIzMDBFOTYxREYgLyogSU9LaXQuZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJT0tpdC5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVt
L0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29s
dXRlPiI7IH07CisJCUNFMTFBRDRGMUNCQzQ3RjgwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxp
dGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENvZGVTaWdu
aW5nVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTExQUQ1MTFD
QkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNpZ25pbmdVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0UxQTBCQ0MxQTQ4RTZDNjAwNTRFRjc0IC8qIEFzc2VydGlvblNlcnZp
Y2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzc2VydGlvblNlcnZp
Y2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMUEwQkNEMUE0OEU2QzYw
MDU0RUY3NCAvKiBDb3JlUERGU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvcmVQREZTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UxQTBCQ0UxQTQ4
RTZDNjAwNTRFRjc0IC8qIERhdGFEZXRlY3RvcnNVSVNQSS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JzVUlTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYyMjMsNiArNjIyNyw4IEBACiAJCQkJRTFBMzE3MzExMzRDRUE2QzAwN0M5QTRG
IC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLywKIAkJCQlFMUEzMTczNDEzNENFQTgwMDA3QzlBNEYg
LyogQXR0cmlidXRlZFN0cmluZy5tbSAqLywKIAkJCQk5RjU0Rjg4RTE2NDg4RTg3MDA3REY4MUEg
LyogQ2hpbGRQcm9jZXNzTWFjLm1tICovLAorCQkJCUNFMTFBRDUxMUNCQzQ4MkYwMDY4MUVFNSAv
KiBDb2RlU2lnbmluZ1V0aWxpdGllcy5oICovLAorCQkJCUNFMTFBRDRGMUNCQzQ3RjgwMDY4MUVF
NSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSAqLywKIAkJCQkxQTJBNEFGRTE1ODY5MzkyMDA5
MEM5RTkgLyogQ29sb3JTcGFjZURhdGEuaCAqLywKIAkJCQkxQTJBNEFGRDE1ODY5MzkyMDA5MEM5
RTkgLyogQ29sb3JTcGFjZURhdGEubW0gKi8sCiAJCQkJQ0RDMzgzMEUxNzIxMjQyRDAwOEEyRkMz
IC8qIENvb2tpZVN0b3JhZ2VTaGltLmggKi8sCkBAIC03MzE5LDYgKzczMjUsNyBAQAogCQkJCTUx
RkFFQzNBMUIwNjU3NjMwMDA5QzRFNyAvKiBDaGlsZFByb2Nlc3NNZXNzYWdlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTE1MTNDNjcxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTBGNDI3MjE3MkEwQzc0MDA5MzlGRjAgLyogQ2hpbGRQ
cm9jZXNzU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0UxMUFENTIxQ0JDNDgyRjAw
NjgxRUU1IC8qIENvZGVTaWduaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTZG
OUY5MDExRTEzRUZDMDBEQjEzNzEgLyogQ29tbWFuZExpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTM3QkVDNEUxMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M0RTlGNjEzMUM2RTdFMDAyOUJENUEgLyogY29uZmln
LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NjEsNiArODc2OCw3IEBACiAJCQkJOUY1NEY4OEYxNjQ4
OEU4NzAwN0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
RkFFQzNCMUIwNjU3NjgwMDA5QzRFNyAvKiBDaGlsZFByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1MTNDNjYxNjZFQUJCMjAwMTQ5RkNCIC8qIENoaWxkUHJv
Y2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFMTFBRDUwMUNCQzQ3RjgwMDY4MUVF
NSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMkE0QjBF
MTU4NkEyMjQwMDkwQzlFOSAvKiBDb2xvclNwYWNlRGF0YS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBNkY5RkI3MTFFMTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGluZVBPU0lYLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTM3QkVDNEUwMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9uSGFuZGxl
ckNhbGxDaGVja2VyLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276187</attachid>
            <date>2016-04-11 16:40:14 -0700</date>
            <delta_ts>2016-04-11 16:50:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156447-20160411164023.patch</filename>
            <type>text/plain</type>
            <size>20861</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDA2NjRjMWMzYmVkODdm
NzBiYTBiYzc5ZjhkNzc2MGFkYmIzNzY2ZC4uMzUyNTZmZDM2Y2Q2MGFmYjgwZTdlMDM2MTFkNDM0
ODRjYjFhM2NmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDM5IEBACiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjE5ODkzMyk6IFVuYWJsZSB0byBsb2dpbiB0byBHb29nbGUgYWNjb3VudCBmcm9tIElu
dGVybmV0IEFjY291bnRzIHByZWZlcmVuY2UgcGFuZQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDQ3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NTY2MTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXZlcnRzIHRoZSB3b3JrYXJvdW5kIGxhbmRlZCBpbiByMTk5MzAxIGFuZCB0ZWFjaGVzIFBy
b2Nlc3NMYXVuY2hlck1hYyB0byB1c2UgdGhlIGNvZGUKKyAgICAgICAgc2lnbmluZyBpZGVudGlm
aWVyIG9mIHRoZSBVSSBwcm9jZXNzIGFzIHRoZSBjbGllbnQtaWRlbnRpZmllciBpZiBpdCBpcyBz
aWduZWQuIE90aGVyd2lzZSwKKyAgICAgICAgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBtYWlu
IGJ1bmRsZSBpZGVudGlmaWVyIG9yIF9OU0dldFByb2duYW1lKCkgZGVwZW5kaW5nIG9uIHdoZXRo
ZXIKKyAgICAgICAgdGhlIFVJIHByb2Nlc3MgaGFzIGFuIGFzc29jaWF0ZWQgYXBwIGJ1bmRsZS4K
KworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nVXRpbGl0aWVzLm1tLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKTog
TW92ZWQgZnJvbSBoZXJlIHRvIGZpbGUgU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5t
bS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmg6IEFkZGVkLgor
ICAgICAgICAqIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW06IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZSk6IEFkZGVkLiBS
ZXR1cm5zIHRoZSBjb2RlIHNpZ25pbmcgaWRlbnRpZmllciBmcm9tIHRoZSBzcGVjaWZpZWQKKyAg
ICAgICAgU2VjQ29kZSBvYmplY3QuIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHJldHJpZXZpbmcg
dGhlIGlkZW50aWZpZXIgdGhlbiBhIG51bGwgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUKKyAg
ICAgICAgY29kZSBzaWduYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZWNDb2RlIG9iamVjdCBp
cyBpbnZhbGlkIG9yIG1hbGZvcm1lZCB0aGVuIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4K
KyAgICAgICAgT3RoZXJ3aXNlLCBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNvZGUgc2ln
bmVkIGJ1bmRsZSBpZGVudGlmaWVyIChmb3IgYW4gYXBwIGJ1bmRsZSkgb3IgdGhlIHNpZ25pbmcK
KyAgICAgICAgaWRlbnRpZmllciAoZm9yIGEgY29tbWFuZCBsaW5lIHRvb2wpIGlzIHJldHVybmVk
LgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBBZGRlZC4gUmV0dXJu
cyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuCisg
ICAgICAgIChXZWJLaXQ6OmNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MpOiBNb3ZlZCBm
cm9tIGZpbGUgU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0uIEV4dHJhY3RlZCBsb2dpYwor
ICAgICAgICBmb3IgcmV0cmlldmluZyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZnJvbSBh
IFNlY0NvZGUgb2JqZWN0IGludG8gaGVscGVyIGZ1bmN0aW9uIFdlYktpdDo6Y29kZVNpZ25pbmdJ
ZGVudGlmaWVyRnJvbVNlY0NvZGUoKQorICAgICAgICBhbmQgbW9kaWZpZWQgdGhpcyBmdW5jdGlv
biB0byBtYWtlIHVzZSBvZiBpdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29ubmVjdFRvU2VydmljZSk6
IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjbGllbnQtaWRlbnRpZmll
ciBpZiB3ZSBoYXZlIG9uZSAoZS5nLgorICAgICAgICB3ZSBhcmUgc2lnbmVkIGFwcCkuIElmIHdl
IGRvIG5vdCBoYXZlIGEgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgdGhlbiB0YWtlIGNsaWVudC1p
ZGVudGlmaWVyIHRvIGJlIHRoZQorICAgICAgICBidW5kbGUgaWRlbnRpZmllciBvZiBvdXIgbWFp
biBidW5kbGUuIEZhaWxpbmcgdGhhdCB3ZSB0YWtlIGNsaWVudC1pZGVudGlmaWVyIHRvIGJlIF9O
U0dldFByb2duYW1lKCkuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLntoLCBtbX0uCisK
KzIwMTYtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAg
IFJFR1JFU1NJT04gKHIxOTg5MzMpOiBVbmFibGUgdG8gbG9naW4gdG8gR29vZ2xlIGFjY291bnQg
ZnJvbSBJbnRlcm5ldCBBY2NvdW50cyBwcmVmZXJlbmNlIHBhbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ0NwogICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjU2MjgxMzM+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhNjJlMTAwOTQ2MjdhZmM1ODZlMzk0MDhmMjNh
OGJhNWJiZTk0N2M0Li42ZmQ1N2E1YWE4MTgyYTJiZjc2MTMyOGUzODU5ZDZkZDcxNWVlMDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMTIyLDYgKzEyMiw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW0KICAg
ICBTaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KICAgICBTaGFyZWQvbWFjL0NoaWxkUHJv
Y2Vzc01hYy5tbQorICAgIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0KICAgICBT
aGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCiAgICAgU2hhcmVkL21hYy9Db29raWVTdG9yYWdl
U2hpbS5tbQogICAgIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQppbmRleCAyOTFhNDQ3
NTkwYzA2YzlhNzIyYTZlNGE2NTIzNDE0MWZlYzE2YzFiLi4zNjY4MTliNGUwYzYzYWViZmQxN2Q0
MGZhZTQzMzYxYWNlMGVjODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L0NoaWxkUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxk
UHJvY2Vzc01hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbXBv
cnQgIkNoaWxkUHJvY2Vzcy5oIgogCisjaW1wb3J0ICJDb2RlU2lnbmluZ1V0aWxpdGllcy5oIgog
I2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgpA
QCAtMzgsNyArMzksNiBAQAogI2ltcG9ydCA8cHdkLmg+CiAjaW1wb3J0IDxzdGRsaWIuaD4KICNp
bXBvcnQgPHN5c2V4aXRzLmg+Ci0jaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KIAogI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCkBAIC03OCwzOSArNzgsNiBAQCB2b2lkIENoaWxkUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1cnJl
bnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlk
LCBPU1N0YXR1cyYgZXJyb3JDb2RlKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlk
Q0ZOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZwaWQpKTsKLSAgICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNH
dWVzdEF0dHJpYnV0ZVBpZCB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51
bWJlci5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2
YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBTZWNDb2RlUmVm
IGNvZGUgPSBudWxscHRyOwotICAgIGlmICgoZXJyb3JDb2RlID0gU2VjQ29kZUNvcHlHdWVzdFdp
dGhBdHRyaWJ1dGVzKG51bGxwdHIsIGF0dHJpYnV0ZXMuZ2V0KCksIGtTZWNDU0RlZmF1bHRGbGFn
cywgJmNvZGUpKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFJldGFpblB0cjxTZWND
b2RlUmVmPiBjb2RlUHRyID0gYWRvcHRDRihjb2RlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb2Rl
UHRyKTsKLQotICAgIENGU3RyaW5nUmVmIG1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3Bl
clNpZ25lZFJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2Vy
dGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9y
IGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAw
LjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4x
LjEzXSkiKTsKLSAgICBTZWNSZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxs
cHRyOwotICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmco
bWFjQXBwU3RvcmVTaWduZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQsIGtTZWND
U0RlZmF1bHRGbGFncywgJnNpZ25pbmdSZXF1aXJlbWVudCkpOwotICAgIFJldGFpblB0cjxTZWNS
ZXF1aXJlbWVudFJlZj4gc2lnbmluZ1JlcXVpcmVtZW50UHRyID0gYWRvcHRDRihzaWduaW5nUmVx
dWlyZW1lbnQpOwotICAgIGVycm9yQ29kZSA9IFNlY0NvZGVDaGVja1ZhbGlkaXR5KGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgc2lnbmluZ1JlcXVpcmVtZW50UHRyLmdldCgpKTsK
LSAgICBpZiAoZXJyb3JDb2RlID09IGVyclNlY0NTVW5zaWduZWQgfHwgZXJyb3JDb2RlID09IGVy
clNlY0NTUmVxRmFpbGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIFVuc2lnbmVkLCBz
aWduZWQgYnkgQXBwbGUsIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5Ci0gICAgaWYgKGVycm9y
Q29kZSAhPSBlcnJTZWNTdWNjZXNzKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsgLy8g
ZS5nLiBpbnZhbGlkL21hbGZvcm1lZCBzaWduYXR1cmUKLSAgICBTdHJpbmcgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyOwotICAgIENGRGljdGlvbmFyeVJlZiBzaWduaW5nSW5mbyA9IG51bGxwdHI7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2lnbmluZ0luZm9ybWF0aW9uKGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdJbmZvKSk7Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc2lnbmluZ0luZm9QdHIgPSBhZG9wdENGKHNpZ25pbmdJbmZvKTsK
LSAgICBpZiAoQ0ZEaWN0aW9uYXJ5UmVmIHBsaXN0ID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWND
b2RlSW5mb1BMaXN0KSkpCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IFN0cmluZyhk
eW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHBsaXN0LCBr
Q0ZCdW5kbGVJZGVudGlmaWVyS2V5KSkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyID0gU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWNDb2RlSW5mb0lkZW50aWZpZXIp
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVTaWduaW5nSWRlbnRpZmllci5pc0VtcHR5KCkp
OwotICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZpZXI7Ci19Ci0KIHZvaWQgQ2hpbGRQcm9j
ZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNh
bmRib3hQYXJhbWV0ZXJzKQogewogICAgIE5TQnVuZGxlICp3ZWJraXQyQnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tWaWV3IildOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyNWU0MGY3MTY5Y2NhNDZhNTg4NzEyZGVjMjc4YTUxMjUzNTZkN2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdHJpbmcgY29k
ZVNpZ25pbmdJZGVudGlmaWVyKE9TU3RhdHVzJiBlcnJvckNvZGUpOworU3RyaW5nIGNvZGVTaWdu
aW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QsIE9TU3RhdHVzJiBlcnJvckNvZGUpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3ODU1MWVhOTk2MGUwNTg5OWUzNjA1
ZmMzZTQwMjU4ODNkMzczNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVNpZ25pbmdVdGlsaXRpZXMu
aCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHND
Ri5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFN0cmluZyBjb2RlU2lnbmluZ0lk
ZW50aWZpZXJGcm9tU2VjQ29kZShTZWNDb2RlUmVmIGNvZGUsIE9TU3RhdHVzJiBlcnJvckNvZGUp
Cit7CisgICAgQ0ZTdHJpbmdSZWYgYXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVkT3JBcHBs
ZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUpIG9yIChh
bmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjEx
MzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRl
IDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltm
aWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjEzXSkiKTsKKyAgICBTZWNSZXF1aXJlbWVudFJl
ZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxscHRyOworICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNS
ZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmcoYXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVk
T3JBcHBsZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50LCBrU2VjQ1NEZWZhdWx0RmxhZ3MsICZz
aWduaW5nUmVxdWlyZW1lbnQpKTsKKyAgICBSZXRhaW5QdHI8U2VjUmVxdWlyZW1lbnRSZWY+IHNp
Z25pbmdSZXF1aXJlbWVudFB0ciA9IGFkb3B0Q0Yoc2lnbmluZ1JlcXVpcmVtZW50KTsKKyAgICBl
cnJvckNvZGUgPSBTZWNDb2RlQ2hlY2tWYWxpZGl0eShjb2RlLCBrU2VjQ1NEZWZhdWx0RmxhZ3Ms
IHNpZ25pbmdSZXF1aXJlbWVudFB0ci5nZXQoKSk7CisgICAgaWYgKGVycm9yQ29kZSA9PSBlcnJT
ZWNDU1Vuc2lnbmVkIHx8IGVycm9yQ29kZSA9PSBlcnJTZWNDU1JlcUZhaWxlZCkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOyAvLyBVbnNpZ25lZCBvciBzaWduZWQgYnkgYSB0aGlyZC1wYXJ0eQor
ICAgIGlmIChlcnJvckNvZGUgIT0gZXJyU2VjU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7IC8vIGUuZy4gaW52YWxpZC9tYWxmb3JtZWQgc2lnbmF0dXJlCisgICAgU3RyaW5n
IGNvZGVTaWduaW5nSWRlbnRpZmllcjsKKyAgICBDRkRpY3Rpb25hcnlSZWYgc2lnbmluZ0luZm8g
PSBudWxscHRyOworICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNDb2RlQ29weVNpZ25pbmdJbmZvcm1h
dGlvbihjb2RlLCBrU2VjQ1NEZWZhdWx0RmxhZ3MsICZzaWduaW5nSW5mbykpOworICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IHNpZ25pbmdJbmZvUHRyID0gYWRvcHRDRihzaWduaW5nSW5m
byk7CisgICAgaWYgKENGRGljdGlvbmFyeVJlZiBwbGlzdCA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRp
Y3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHNpZ25pbmdJbmZvUHRyLmdldCgpLCBr
U2VjQ29kZUluZm9QTGlzdCkpKQorICAgICAgICBjb2RlU2lnbmluZ0lkZW50aWZpZXIgPSBTdHJp
bmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbGlz
dCwga0NGQnVuZGxlSWRlbnRpZmllcktleSkpKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVTaWdu
aW5nSWRlbnRpZmllciA9IFN0cmluZyhkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHNpZ25pbmdJbmZvUHRyLmdldCgpLCBrU2VjQ29kZUluZm9JZGVudGlm
aWVyKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlU2lnbmluZ0lkZW50aWZpZXIuaXNFbXB0
eSgpKTsKKyAgICByZXR1cm4gY29kZVNpZ25pbmdJZGVudGlmaWVyOworfQorICAgIAorU3RyaW5n
IGNvZGVTaWduaW5nSWRlbnRpZmllcihPU1N0YXR1cyYgZXJyb3JDb2RlKQoreworICAgIFNlY0Nv
ZGVSZWYgY29kZSA9IG51bGxwdHI7CisgICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2RlQ29weVNl
bGYoa1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgUmV0YWluUHRyPFNlY0NvZGVSZWY+IGNvZGVQdHIgPSBhZG9wdENGKGNvZGUpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNvZGVQdHIpOworICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZp
ZXJGcm9tU2VjQ29kZShjb2RlUHRyLmdldCgpLCBlcnJvckNvZGUpOworfQorCitTdHJpbmcgY29k
ZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2VzcyhwaWRfdCBwaWQsIE9TU3RhdHVzJiBlcnJvckNv
ZGUpCit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBwaWRDRk51bWJlciA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnBp
ZCkpOworICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga1NlY0d1ZXN0QXR0cmlidXRlUGlkIH07
CisgICAgY29uc3Qgdm9pZCogdmFsdWVzW10gPSB7IHBpZENGTnVtYmVyLmdldCgpIH07CisgICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xF
TkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7Cisg
ICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2RlQ29weUd1ZXN0V2l0aEF0dHJpYnV0ZXMobnVsbHB0
ciwgYXR0cmlidXRlcy5nZXQoKSwga1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPFNlY0NvZGVSZWY+IGNvZGVQdHIgPSBh
ZG9wdENGKGNvZGUpOworICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVQdHIpOworICAgIHJldHVybiBj
b2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZShjb2RlUHRyLmdldCgpLCBlcnJvckNvZGUp
OworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCmluZGV4IDkyNmIxOTBlMDJmMzlhNWI0ZGY5ZjM2YjZl
ZTkyYWUyZTRhYjVlMDQuLjNkNWRmZjMxODg1NGM2NDRlZjU1YTE0ZWQyOTFlNWM1OTQ2ZTQyNGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vz
c0xhdW5jaGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCkBAIC0yNiw2ICsyNiw5IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIlByb2Nlc3NMYXVuY2hlci5oIgogCisjaWYgUExBVEZPUk0oTUFDKQor
I2ltcG9ydCAiQ29kZVNpZ25pbmdVdGlsaXRpZXMuaCIKKyNlbmRpZgogI2ltcG9ydCA8V2ViQ29y
ZS9DRkJ1bmRsZVNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXJ2ZXJzU1BJLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CkBAIC0xMzYsOCArMTM5LDEzIEBAIHN0YXRpYyB2b2lk
IGNvbm5lY3RUb1NlcnZpY2UoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBs
YXVuY2hPcHRpb25zCiAgICAgLy8gSW5zZXJ0IGEgc2VuZCByaWdodCBzbyB3ZSBjYW4gc2VuZCB0
byBpdC4KICAgICBtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGxpc3Rl
bmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKTsKIAotICAg
IE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5k
bGVJZGVudGlmaWVyXTsKLSAgICBDU3RyaW5nIGNsaWVudElkZW50aWZpZXIgPSBidW5kbGVJZGVu
dGlmaWVyID8gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0p
LnV0ZjgoKSA6ICpfTlNHZXRQcm9nbmFtZSgpOworICAgIE9TU3RhdHVzIGVycm9yID0gMDsKKyAg
ICBTdHJpbmcgY2xpZW50SWRlbnRpZmllciA9IFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVy
KGVycm9yKTsKKyAgICBib29sIGlzQ29kZVNpZ25lZCA9ICFjbGllbnRJZGVudGlmaWVyLmlzTnVs
bCgpOworICAgIGlmIChpc0NvZGVTaWduZWQgJiYgZXJyb3IpCisgICAgICAgIFdURkxvZ0Fsd2F5
cygiQ291bGQgbm90IHRvIGdldCBjb2RlIHNpZ25pbmcgaWRlbnRpZmllcjogJWxkXG4iLCBzdGF0
aWNfY2FzdDxsb25nPihlcnJvcikpOworICAgIGlmIChjbGllbnRJZGVudGlmaWVyLmlzRW1wdHko
KSkKKyAgICAgICAgY2xpZW50SWRlbnRpZmllciA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVu
ZGxlSWRlbnRpZmllcl07CiAKICAgICAvLyBGSVhNRTogU3dpdGNoIHRvIHhwY19jb25uZWN0aW9u
X3NldF9ib290c3RyYXAgb25jZSBpdCdzIGF2YWlsYWJsZSBldmVyeXdoZXJlIHdlIG5lZWQuCiAg
ICAgYXV0byBib290c3RyYXBNZXNzYWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9j
cmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOwpAQCAtMTQ2LDcgKzE1NCw3IEBAIHN0YXRpYyB2
b2lkIGNvbm5lY3RUb1NlcnZpY2UoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25z
JiBsYXVuY2hPcHRpb25zCiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X21hY2hfc2VuZChib290c3Ry
YXBNZXNzYWdlLmdldCgpLCAic2VydmVyLXBvcnQiLCBsaXN0ZW5pbmdQb3J0KTsKICAgICBtYWNo
X3BvcnRfZGVhbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBsaXN0ZW5pbmdQb3J0KTsKIAotICAg
IHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNsaWVu
dC1pZGVudGlmaWVyIiwgY2xpZW50SWRlbnRpZmllci5kYXRhKCkpOworICAgIHhwY19kaWN0aW9u
YXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImNsaWVudC1pZGVudGlmaWVy
IiwgIWNsaWVudElkZW50aWZpZXIuaXNFbXB0eSgpID8gY2xpZW50SWRlbnRpZmllci51dGY4KCku
ZGF0YSgpIDogKl9OU0dldFByb2duYW1lKCkpOwogICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJp
bmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgInVpLXByb2Nlc3MtbmFtZSIsIFtbW05TUHJvY2Vz
c0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NOYW1lXSBVVEY4U3RyaW5nXSk7CiAKICAgICBpZiAo
Zm9yRGV2ZWxvcG1lbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA0ZGE1NzFlYTA2NGM0NDkyOTkyZGQzOGY4ODdmZTU1MjQw
YTlmYWIyLi4yOTdkMmE5MzMxZjUzNWE5MGM3MDg5ZjRlYzAwOTU4N2Y1MjEzMWIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NzExLDYgKzE3MTEsOCBAQAogCQlDREMzODMxMDE3MjEyNDQwMDA4QTJGQzMgLyogQ29va2llU3Rv
cmFnZVNoaW0ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDREMzODMwRDE3MjEyNDJEMDA4QTJGQzMgLyogQ29va2llU3RvcmFnZVNoaW0ubW0gKi87IH07
CiAJCUNEQ0E4NUM4MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
QTg1QzYxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0g
Ki87IH07CiAJCUNEQ0E4NUM5MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRENBODVDNzEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxl
ci5oICovOyB9OworCQlDRTExQUQ1MDFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGls
aXRpZXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RTExQUQ0RjFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gKi87IH07
CisJCUNFMTFBRDUyMUNCQzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxMUFENTExQ0JD
NDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nVXRpbGl0aWVzLmggKi87IH07CiAJCUNFMUEwQkQy
MUE0OEU2QzYwMDU0RUY3NCAvKiBBc3NlcnRpb25TZXJ2aWNlc1NQSS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0UxQTBCQ0MxQTQ4RTZDNjAwNTRFRjc0
IC8qIEFzc2VydGlvblNlcnZpY2VzU1BJLmggKi87IH07CiAJCUNFMUEwQkQzMUE0OEU2QzYwMDU0
RUY3NCAvKiBDb3JlUERGU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBDRTFBMEJDRDFBNDhFNkM2MDA1NEVGNzQgLyogQ29yZVBERlNQSS5oICovOyB9
OwogCQlDRTFBMEJENDFBNDhFNkM2MDA1NEVGNzQgLyogRGF0YURldGVjdG9yc1VJU1BJLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTFBMEJDRTFBNDhF
NkM2MDA1NEVGNzQgLyogRGF0YURldGVjdG9yc1VJU1BJLmggKi87IH07CkBAIC0zNzg2LDYgKzM3
ODgsOCBAQAogCQlDRENBODVDNjEzMkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93
Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUNEQ0E4NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDQTg1RDQxMzJB
QzJCMzAwRTk2MURGIC8qIElPS2l0LmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQu
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OworCQlDRTExQUQ0RjFDQkM0N0Y4MDA2
ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQ0UxMUFENTExQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nVXRp
bGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTaWduaW5nVXRp
bGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFMUEwQkNDMUE0OEU2QzYw
MDU0RUY3NCAvKiBBc3NlcnRpb25TZXJ2aWNlc1NQSS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBc3NlcnRpb25TZXJ2aWNlc1NQSS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDRTFBMEJDRDFBNDhFNkM2MDA1NEVGNzQgLyogQ29yZVBERlNQSS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3JlUERGU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUNFMUEwQkNFMUE0OEU2QzYwMDU0RUY3NCAvKiBEYXRhRGV0ZWN0b3JzVUlT
UEkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YURldGVjdG9yc1VJU1BJ
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjIzLDYgKzYyMjcsOCBAQAogCQkJ
CUUxQTMxNzMxMTM0Q0VBNkMwMDdDOUE0RiAvKiBBdHRyaWJ1dGVkU3RyaW5nLmggKi8sCiAJCQkJ
RTFBMzE3MzQxMzRDRUE4MDAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcubW0gKi8sCiAJCQkJ
OUY1NEY4OEUxNjQ4OEU4NzAwN0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSAqLywKKwkJCQlD
RTExQUQ1MTFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMuaCAqLywKKwkJ
CQlDRTExQUQ0RjFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gKi8s
CiAJCQkJMUEyQTRBRkUxNTg2OTM5MjAwOTBDOUU5IC8qIENvbG9yU3BhY2VEYXRhLmggKi8sCiAJ
CQkJMUEyQTRBRkQxNTg2OTM5MjAwOTBDOUU5IC8qIENvbG9yU3BhY2VEYXRhLm1tICovLAogCQkJ
CUNEQzM4MzBFMTcyMTI0MkQwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbS5oICovLApAQCAt
NzMxOSw2ICs3MzI1LDcgQEAKIAkJCQk1MUZBRUMzQTFCMDY1NzYzMDAwOUM0RTcgLyogQ2hpbGRQ
cm9jZXNzTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNTEzQzY3MTY2RUFCQjIwMDE0
OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjkwRjQyNzIx
NzJBMEM3NDAwOTM5RkYwIC8qIENoaWxkUHJvY2Vzc1N1cHBsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCUNFMTFBRDUyMUNCQzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RjlGOTAxMUUxM0VGQzAwREIxMzcxIC8qIENvbW1hbmRM
aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0JFQzRFMTE5NDkxNDg2MDA4QjQyODYgLyogQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdDNEU5RjYx
MzFDNkU3RTAwMjlCRDVBIC8qIGNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NzYxLDYgKzg3
NjgsNyBAQAogCQkJCTlGNTRGODhGMTY0ODhFODcwMDdERjgxQSAvKiBDaGlsZFByb2Nlc3NNYWMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUZBRUMzQjFCMDY1NzY4MDAwOUM0RTcgLyogQ2hpbGRQ
cm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxNTEzQzY2MTY2
RUFCQjIwMDE0OUZDQiAvKiBDaGlsZFByb2Nlc3NQcm94eS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlDRTExQUQ1MDFDQkM0N0Y4MDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxQTJBNEIwRTE1ODZBMjI0MDA5MEM5RTkgLyogQ29sb3JTcGFjZURh
dGEubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTZGOUZCNzExRTE0MDg1MDBEQjEzNzEgLyogQ29t
bWFuZExpbmVQT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0JFQzRFMDE5NDkxNDg2MDA4
QjQyODYgLyogQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlci5tbSBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276190</attachid>
            <date>2016-04-11 16:50:43 -0700</date>
            <delta_ts>2016-04-11 18:05:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156447-20160411165052.patch</filename>
            <type>text/plain</type>
            <size>20911</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk5MzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNDA2NjRjMWMzYmVkODdm
NzBiYTBiYzc5ZjhkNzc2MGFkYmIzNzY2ZC4uMzUyNTZmZDM2Y2Q2MGFmYjgwZTdlMDM2MTFkNDM0
ODRjYjFhM2NmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDM5IEBACiAKICAgICAgICAgUkVHUkVT
U0lPTiAocjE5ODkzMyk6IFVuYWJsZSB0byBsb2dpbiB0byBHb29nbGUgYWNjb3VudCBmcm9tIElu
dGVybmV0IEFjY291bnRzIHByZWZlcmVuY2UgcGFuZQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2NDQ3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NTY2MTgyOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZXZlcnRzIHRoZSB3b3JrYXJvdW5kIGxhbmRlZCBpbiByMTk5MzAxIGFuZCB0ZWFjaGVzIFBy
b2Nlc3NMYXVuY2hlck1hYyB0byB1c2UgdGhlIGNvZGUKKyAgICAgICAgc2lnbmluZyBpZGVudGlm
aWVyIG9mIHRoZSBVSSBwcm9jZXNzIGFzIHRoZSBjbGllbnQtaWRlbnRpZmllciBpZiBpdCBpcyBz
aWduZWQuIE90aGVyd2lzZSwKKyAgICAgICAgd2UgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBtYWlu
IGJ1bmRsZSBpZGVudGlmaWVyIG9yIF9OU0dldFByb2duYW1lKCkgZGVwZW5kaW5nIG9uIHdoZXRo
ZXIKKyAgICAgICAgdGhlIFVJIHByb2Nlc3MgaGFzIGFuIGFzc29jaWF0ZWQgYXBwIGJ1bmRsZS4K
KworICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVT
aWduaW5nVXRpbGl0aWVzLm1tLgorICAgICAgICAqIFNoYXJlZC9tYWMvQ2hpbGRQcm9jZXNzTWFj
Lm1tOgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGb3JQcm9jZXNzKTog
TW92ZWQgZnJvbSBoZXJlIHRvIGZpbGUgU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5t
bS4KKyAgICAgICAgKiBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmg6IEFkZGVkLgor
ICAgICAgICAqIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW06IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZSk6IEFkZGVkLiBS
ZXR1cm5zIHRoZSBjb2RlIHNpZ25pbmcgaWRlbnRpZmllciBmcm9tIHRoZSBzcGVjaWZpZWQKKyAg
ICAgICAgU2VjQ29kZSBvYmplY3QuIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHJldHJpZXZpbmcg
dGhlIGlkZW50aWZpZXIgdGhlbiBhIG51bGwgc3RyaW5nIGlzIHJldHVybmVkLiBJZiB0aGUKKyAg
ICAgICAgY29kZSBzaWduYXR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBTZWNDb2RlIG9iamVjdCBp
cyBpbnZhbGlkIG9yIG1hbGZvcm1lZCB0aGVuIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4K
KyAgICAgICAgT3RoZXJ3aXNlLCBhIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgdGhlIGNvZGUgc2ln
bmVkIGJ1bmRsZSBpZGVudGlmaWVyIChmb3IgYW4gYXBwIGJ1bmRsZSkgb3IgdGhlIHNpZ25pbmcK
KyAgICAgICAgaWRlbnRpZmllciAoZm9yIGEgY29tbWFuZCBsaW5lIHRvb2wpIGlzIHJldHVybmVk
LgorICAgICAgICAoV2ViS2l0Ojpjb2RlU2lnbmluZ0lkZW50aWZpZXIpOiBBZGRlZC4gUmV0dXJu
cyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuCisg
ICAgICAgIChXZWJLaXQ6OmNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MpOiBNb3ZlZCBm
cm9tIGZpbGUgU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0uIEV4dHJhY3RlZCBsb2dpYwor
ICAgICAgICBmb3IgcmV0cmlldmluZyB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZnJvbSBh
IFNlY0NvZGUgb2JqZWN0IGludG8gaGVscGVyIGZ1bmN0aW9uIFdlYktpdDo6Y29kZVNpZ25pbmdJ
ZGVudGlmaWVyRnJvbVNlY0NvZGUoKQorICAgICAgICBhbmQgbW9kaWZpZWQgdGhpcyBmdW5jdGlv
biB0byBtYWtlIHVzZSBvZiBpdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6Y29ubmVjdFRvU2VydmljZSk6
IFVzZSB0aGUgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjbGllbnQtaWRlbnRpZmll
ciBpZiB3ZSBoYXZlIG9uZSAoZS5nLgorICAgICAgICB3ZSBhcmUgc2lnbmVkIGFwcCkuIElmIHdl
IGRvIG5vdCBoYXZlIGEgY29kZSBzaWduaW5nIGlkZW50aWZpZXIgdGhlbiB0YWtlIGNsaWVudC1p
ZGVudGlmaWVyIHRvIGJlIHRoZQorICAgICAgICBidW5kbGUgaWRlbnRpZmllciBvZiBvdXIgbWFp
biBidW5kbGUuIEZhaWxpbmcgdGhhdCB3ZSB0YWtlIGNsaWVudC1pZGVudGlmaWVyIHRvIGJlIF9O
U0dldFByb2duYW1lKCkuCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBBZGQgZmlsZSBTaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLntoLCBtbX0uCisK
KzIwMTYtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAg
IFJFR1JFU1NJT04gKHIxOTg5MzMpOiBVbmFibGUgdG8gbG9naW4gdG8gR29vZ2xlIGFjY291bnQg
ZnJvbSBJbnRlcm5ldCBBY2NvdW50cyBwcmVmZXJlbmNlIHBhbmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQ0NwogICAgICAgICA8cmRhcjovL3By
b2JsZW0vMjU2MjgxMzM+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhNjJlMTAwOTQ2MjdhZmM1ODZlMzk0MDhmMjNh
OGJhNWJiZTk0N2M0Li42ZmQ1N2E1YWE4MTgyYTJiZjc2MTMyOGUzODU5ZDZkZDcxNWVlMDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMTIyLDYgKzEyMiw3IEBAIGxpc3QoQVBQRU5E
IFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9tYWMvQXJndW1lbnRDb2RlcnNNYWMubW0KICAg
ICBTaGFyZWQvbWFjL0F0dHJpYnV0ZWRTdHJpbmcubW0KICAgICBTaGFyZWQvbWFjL0NoaWxkUHJv
Y2Vzc01hYy5tbQorICAgIFNoYXJlZC9tYWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0KICAgICBT
aGFyZWQvbWFjL0NvbG9yU3BhY2VEYXRhLm1tCiAgICAgU2hhcmVkL21hYy9Db29raWVTdG9yYWdl
U2hpbS5tbQogICAgIFNoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW1MaWJyYXJ5LmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9DaGlsZFByb2Nlc3NNYWMubW0gYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxkUHJvY2Vzc01hYy5tbQppbmRleCAyOTFhNDQ3
NTkwYzA2YzlhNzIyYTZlNGE2NTIzNDE0MWZlYzE2YzFiLi4zNjY4MTliNGUwYzYzYWViZmQxN2Q0
MGZhZTQzMzYxYWNlMGVjODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L0NoaWxkUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NoaWxk
UHJvY2Vzc01hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogI2lmIFBMQVRGT1JNKE1BQykKICNpbXBv
cnQgIkNoaWxkUHJvY2Vzcy5oIgogCisjaW1wb3J0ICJDb2RlU2lnbmluZ1V0aWxpdGllcy5oIgog
I2ltcG9ydCAiU2FuZGJveEluaXRpYWxpemF0aW9uUGFyYW1ldGVycy5oIgogI2ltcG9ydCAiV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgpA
QCAtMzgsNyArMzksNiBAQAogI2ltcG9ydCA8cHdkLmg+CiAjaW1wb3J0IDxzdGRsaWIuaD4KICNp
bXBvcnQgPHN5c2V4aXRzLmg+Ci0jaW1wb3J0IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KICNpbXBv
cnQgPHd0Zi9zcGkvZGFyd2luL1NhbmRib3hTUEkuaD4KIAogI2lmIFVTRShBUFBMRV9JTlRFUk5B
TF9TREspCkBAIC03OCwzOSArNzgsNiBAQCB2b2lkIENoaWxkUHJvY2Vzczo6cGxhdGZvcm1Jbml0
aWFsaXplKCkKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1cnJl
bnREaXJlY3RvcnlQYXRoOltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwogfQog
Ci1zdGF0aWMgU3RyaW5nIGNvZGVTaWduaW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QgcGlk
LCBPU1N0YXR1cyYgZXJyb3JDb2RlKQotewotICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGlk
Q0ZOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckludFR5cGUsICZwaWQpKTsKLSAgICBjb25zdCB2b2lkKiBrZXlzW10gPSB7IGtTZWNH
dWVzdEF0dHJpYnV0ZVBpZCB9OwotICAgIGNvbnN0IHZvaWQqIHZhbHVlc1tdID0geyBwaWRDRk51
bWJlci5nZXQoKSB9OwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0dHJpYnV0ZXMg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCB2
YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBTZWNDb2RlUmVm
IGNvZGUgPSBudWxscHRyOwotICAgIGlmICgoZXJyb3JDb2RlID0gU2VjQ29kZUNvcHlHdWVzdFdp
dGhBdHRyaWJ1dGVzKG51bGxwdHIsIGF0dHJpYnV0ZXMuZ2V0KCksIGtTZWNDU0RlZmF1bHRGbGFn
cywgJmNvZGUpKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIFJldGFpblB0cjxTZWND
b2RlUmVmPiBjb2RlUHRyID0gYWRvcHRDRihjb2RlKTsKLSAgICBSRUxFQVNFX0FTU0VSVChjb2Rl
UHRyKTsKLQotICAgIENGU3RyaW5nUmVmIG1hY0FwcFN0b3JlU2lnbmVkT3JBcHBsZURldmVsb3Bl
clNpZ25lZFJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2Vy
dGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9y
IGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRlIDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAw
LjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4x
LjEzXSkiKTsKLSAgICBTZWNSZXF1aXJlbWVudFJlZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxs
cHRyOwotICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNSZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmco
bWFjQXBwU3RvcmVTaWduZWRPckFwcGxlRGV2ZWxvcGVyU2lnbmVkUmVxdWlyZW1lbnQsIGtTZWND
U0RlZmF1bHRGbGFncywgJnNpZ25pbmdSZXF1aXJlbWVudCkpOwotICAgIFJldGFpblB0cjxTZWNS
ZXF1aXJlbWVudFJlZj4gc2lnbmluZ1JlcXVpcmVtZW50UHRyID0gYWRvcHRDRihzaWduaW5nUmVx
dWlyZW1lbnQpOwotICAgIGVycm9yQ29kZSA9IFNlY0NvZGVDaGVja1ZhbGlkaXR5KGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgc2lnbmluZ1JlcXVpcmVtZW50UHRyLmdldCgpKTsK
LSAgICBpZiAoZXJyb3JDb2RlID09IGVyclNlY0NTVW5zaWduZWQgfHwgZXJyb3JDb2RlID09IGVy
clNlY0NTUmVxRmFpbGVkKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7IC8vIFVuc2lnbmVkLCBz
aWduZWQgYnkgQXBwbGUsIG9yIHNpZ25lZCBieSBhIHRoaXJkLXBhcnR5Ci0gICAgaWYgKGVycm9y
Q29kZSAhPSBlcnJTZWNTdWNjZXNzKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsgLy8g
ZS5nLiBpbnZhbGlkL21hbGZvcm1lZCBzaWduYXR1cmUKLSAgICBTdHJpbmcgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyOwotICAgIENGRGljdGlvbmFyeVJlZiBzaWduaW5nSW5mbyA9IG51bGxwdHI7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoIVNlY0NvZGVDb3B5U2lnbmluZ0luZm9ybWF0aW9uKGNvZGVQdHIu
Z2V0KCksIGtTZWNDU0RlZmF1bHRGbGFncywgJnNpZ25pbmdJbmZvKSk7Ci0gICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gc2lnbmluZ0luZm9QdHIgPSBhZG9wdENGKHNpZ25pbmdJbmZvKTsK
LSAgICBpZiAoQ0ZEaWN0aW9uYXJ5UmVmIHBsaXN0ID0gZHluYW1pY19jZl9jYXN0PENGRGljdGlv
bmFyeVJlZj4oQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWND
b2RlSW5mb1BMaXN0KSkpCi0gICAgICAgIGNvZGVTaWduaW5nSWRlbnRpZmllciA9IFN0cmluZyhk
eW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHBsaXN0LCBr
Q0ZCdW5kbGVJZGVudGlmaWVyS2V5KSkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZVNpZ25pbmdJ
ZGVudGlmaWVyID0gU3RyaW5nKGR5bmFtaWNfY2ZfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZEaWN0aW9u
YXJ5R2V0VmFsdWUoc2lnbmluZ0luZm9QdHIuZ2V0KCksIGtTZWNDb2RlSW5mb0lkZW50aWZpZXIp
KSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWNvZGVTaWduaW5nSWRlbnRpZmllci5pc0VtcHR5KCkp
OwotICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZpZXI7Ci19Ci0KIHZvaWQgQ2hpbGRQcm9j
ZXNzOjppbml0aWFsaXplU2FuZGJveChjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMsIFNhbmRib3hJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHNh
bmRib3hQYXJhbWV0ZXJzKQogewogICAgIE5TQnVuZGxlICp3ZWJraXQyQnVuZGxlID0gW05TQnVu
ZGxlIGJ1bmRsZUZvckNsYXNzOk5TQ2xhc3NGcm9tU3RyaW5nKEAiV0tWaWV3IildOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db2RlU2lnbmluZ1V0aWxpdGllcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgyNWU0MGY3MTY5Y2NhNDZhNTg4NzEyZGVjMjc4YTUxMjUzNTZkN2YKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitTdHJpbmcgY29k
ZVNpZ25pbmdJZGVudGlmaWVyKE9TU3RhdHVzJiBlcnJvckNvZGUpOworU3RyaW5nIGNvZGVTaWdu
aW5nSWRlbnRpZmllckZvclByb2Nlc3MocGlkX3QsIE9TU3RhdHVzJiBlcnJvckNvZGUpOworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29kZVNpZ25pbmdVdGlsaXRpZXMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
ZGVTaWduaW5nVXRpbGl0aWVzLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3ODU1MWVhOTk2MGUwNTg5OWUzNjA1
ZmMzZTQwMjU4ODNkMzczNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL0NvZGVTaWduaW5nVXRpbGl0aWVzLm1tCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29kZVNpZ25pbmdVdGlsaXRpZXMu
aCIKKworI2lmIFBMQVRGT1JNKE1BQykKKworI2luY2x1ZGUgPFNlY3VyaXR5L1NlY3VyaXR5Lmg+
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9jZi9UeXBlQ2FzdHND
Ri5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFN0cmluZyBjb2RlU2lnbmluZ0lk
ZW50aWZpZXJGcm9tU2VjQ29kZShTZWNDb2RlUmVmIGNvZGUsIE9TU3RhdHVzJiBlcnJvckNvZGUp
Cit7CisgICAgQ0ZTdHJpbmdSZWYgYXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVkT3JBcHBs
ZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50ID0gQ0ZTVFIoIihhbmNob3IgYXBwbGUpIG9yIChh
bmNob3IgYXBwbGUgZ2VuZXJpYyBhbmQgY2VydGlmaWNhdGUgbGVhZltmaWVsZC4xLjIuODQwLjEx
MzYzNS4xMDAuNi4xLjldKSBvciAoYW5jaG9yIGFwcGxlIGdlbmVyaWMgYW5kIGNlcnRpZmljYXRl
IDFbZmllbGQuMS4yLjg0MC4xMTM2MzUuMTAwLjYuMi42XSBhbmQgY2VydGlmaWNhdGUgbGVhZltm
aWVsZC4xLjIuODQwLjExMzYzNS4xMDAuNi4xLjEzXSkiKTsKKyAgICBTZWNSZXF1aXJlbWVudFJl
ZiBzaWduaW5nUmVxdWlyZW1lbnQgPSBudWxscHRyOworICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNS
ZXF1aXJlbWVudENyZWF0ZVdpdGhTdHJpbmcoYXBwbGVTaWduZWRPck1hY0FwcFN0b3JlU2lnbmVk
T3JBcHBsZURldmVsb3BlclNpZ25lZFJlcXVpcmVtZW50LCBrU2VjQ1NEZWZhdWx0RmxhZ3MsICZz
aWduaW5nUmVxdWlyZW1lbnQpKTsKKyAgICBSZXRhaW5QdHI8U2VjUmVxdWlyZW1lbnRSZWY+IHNp
Z25pbmdSZXF1aXJlbWVudFB0ciA9IGFkb3B0Q0Yoc2lnbmluZ1JlcXVpcmVtZW50KTsKKyAgICBl
cnJvckNvZGUgPSBTZWNDb2RlQ2hlY2tWYWxpZGl0eShjb2RlLCBrU2VjQ1NEZWZhdWx0RmxhZ3Ms
IHNpZ25pbmdSZXF1aXJlbWVudFB0ci5nZXQoKSk7CisgICAgaWYgKGVycm9yQ29kZSA9PSBlcnJT
ZWNDU1Vuc2lnbmVkIHx8IGVycm9yQ29kZSA9PSBlcnJTZWNDU1JlcUZhaWxlZCkKKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOyAvLyBVbnNpZ25lZCBvciBzaWduZWQgYnkgYSB0aGlyZC1wYXJ0eQor
ICAgIGlmIChlcnJvckNvZGUgIT0gZXJyU2VjU3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7IC8vIGUuZy4gaW52YWxpZC9tYWxmb3JtZWQgc2lnbmF0dXJlCisgICAgU3RyaW5n
IGNvZGVTaWduaW5nSWRlbnRpZmllcjsKKyAgICBDRkRpY3Rpb25hcnlSZWYgc2lnbmluZ0luZm8g
PSBudWxscHRyOworICAgIFJFTEVBU0VfQVNTRVJUKCFTZWNDb2RlQ29weVNpZ25pbmdJbmZvcm1h
dGlvbihjb2RlLCBrU2VjQ1NEZWZhdWx0RmxhZ3MsICZzaWduaW5nSW5mbykpOworICAgIFJldGFp
blB0cjxDRkRpY3Rpb25hcnlSZWY+IHNpZ25pbmdJbmZvUHRyID0gYWRvcHRDRihzaWduaW5nSW5m
byk7CisgICAgaWYgKENGRGljdGlvbmFyeVJlZiBwbGlzdCA9IGR5bmFtaWNfY2ZfY2FzdDxDRkRp
Y3Rpb25hcnlSZWY+KENGRGljdGlvbmFyeUdldFZhbHVlKHNpZ25pbmdJbmZvUHRyLmdldCgpLCBr
U2VjQ29kZUluZm9QTGlzdCkpKQorICAgICAgICBjb2RlU2lnbmluZ0lkZW50aWZpZXIgPSBTdHJp
bmcoZHluYW1pY19jZl9jYXN0PENGU3RyaW5nUmVmPihDRkRpY3Rpb25hcnlHZXRWYWx1ZShwbGlz
dCwga0NGQnVuZGxlSWRlbnRpZmllcktleSkpKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVTaWdu
aW5nSWRlbnRpZmllciA9IFN0cmluZyhkeW5hbWljX2NmX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGRGlj
dGlvbmFyeUdldFZhbHVlKHNpZ25pbmdJbmZvUHRyLmdldCgpLCBrU2VjQ29kZUluZm9JZGVudGlm
aWVyKSkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFjb2RlU2lnbmluZ0lkZW50aWZpZXIuaXNFbXB0
eSgpKTsKKyAgICByZXR1cm4gY29kZVNpZ25pbmdJZGVudGlmaWVyOworfQorICAgIAorU3RyaW5n
IGNvZGVTaWduaW5nSWRlbnRpZmllcihPU1N0YXR1cyYgZXJyb3JDb2RlKQoreworICAgIFNlY0Nv
ZGVSZWYgY29kZSA9IG51bGxwdHI7CisgICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2RlQ29weVNl
bGYoa1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgUmV0YWluUHRyPFNlY0NvZGVSZWY+IGNvZGVQdHIgPSBhZG9wdENGKGNvZGUpOworICAg
IFJFTEVBU0VfQVNTRVJUKGNvZGVQdHIpOworICAgIHJldHVybiBjb2RlU2lnbmluZ0lkZW50aWZp
ZXJGcm9tU2VjQ29kZShjb2RlUHRyLmdldCgpLCBlcnJvckNvZGUpOworfQorCitTdHJpbmcgY29k
ZVNpZ25pbmdJZGVudGlmaWVyRm9yUHJvY2VzcyhwaWRfdCBwaWQsIE9TU3RhdHVzJiBlcnJvckNv
ZGUpCit7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBwaWRDRk51bWJlciA9IGFkb3B0Q0Yo
Q0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnBp
ZCkpOworICAgIGNvbnN0IHZvaWQqIGtleXNbXSA9IHsga1NlY0d1ZXN0QXR0cmlidXRlUGlkIH07
CisgICAgY29uc3Qgdm9pZCogdmFsdWVzW10gPSB7IHBpZENGTnVtYmVyLmdldCgpIH07CisgICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xF
TkdUSChrZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIFNlY0NvZGVSZWYgY29kZSA9IG51bGxwdHI7Cisg
ICAgaWYgKChlcnJvckNvZGUgPSBTZWNDb2RlQ29weUd1ZXN0V2l0aEF0dHJpYnV0ZXMobnVsbHB0
ciwgYXR0cmlidXRlcy5nZXQoKSwga1NlY0NTRGVmYXVsdEZsYWdzLCAmY29kZSkpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPFNlY0NvZGVSZWY+IGNvZGVQdHIgPSBh
ZG9wdENGKGNvZGUpOworICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVQdHIpOworICAgIHJldHVybiBj
b2RlU2lnbmluZ0lkZW50aWZpZXJGcm9tU2VjQ29kZShjb2RlUHRyLmdldCgpLCBlcnJvckNvZGUp
OworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBQTEFURk9STShN
QUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1By
b2Nlc3NMYXVuY2hlck1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCmluZGV4IDkyNmIxOTBlMDJmMzlhNWI0ZGY5ZjM2YjZl
ZTkyYWUyZTRhYjVlMDQuLjZhMGIwNWUwMzVjMWI2M2VhYWY3YmIyZDBjOWMxYWJmMDBjOTFjYjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9tYWMvUHJvY2Vz
c0xhdW5jaGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9t
YWMvUHJvY2Vzc0xhdW5jaGVyTWFjLm1tCkBAIC0yNiw2ICsyNiw5IEBACiAjaW1wb3J0ICJjb25m
aWcuaCIKICNpbXBvcnQgIlByb2Nlc3NMYXVuY2hlci5oIgogCisjaWYgUExBVEZPUk0oTUFDKQor
I2ltcG9ydCAiQ29kZVNpZ25pbmdVdGlsaXRpZXMuaCIKKyNlbmRpZgogI2ltcG9ydCA8V2ViQ29y
ZS9DRkJ1bmRsZVNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9TZXJ2ZXJzU1BJLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1NvZnRMaW5raW5nLmg+CkBAIC0xMzYsOCArMTM5LDE2IEBAIHN0YXRpYyB2b2lk
IGNvbm5lY3RUb1NlcnZpY2UoY29uc3QgUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBs
YXVuY2hPcHRpb25zCiAgICAgLy8gSW5zZXJ0IGEgc2VuZCByaWdodCBzbyB3ZSBjYW4gc2VuZCB0
byBpdC4KICAgICBtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGxpc3Rl
bmluZ1BvcnQsIGxpc3RlbmluZ1BvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKTsKIAotICAg
IE5TU3RyaW5nICpidW5kbGVJZGVudGlmaWVyID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5k
bGVJZGVudGlmaWVyXTsKLSAgICBDU3RyaW5nIGNsaWVudElkZW50aWZpZXIgPSBidW5kbGVJZGVu
dGlmaWVyID8gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0p
LnV0ZjgoKSA6ICpfTlNHZXRQcm9nbmFtZSgpOworICAgIFN0cmluZyBjbGllbnRJZGVudGlmaWVy
OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBPU1N0YXR1cyBlcnJvciA9IDA7CisgICAgY2xpZW50
SWRlbnRpZmllciA9IFdlYktpdDo6Y29kZVNpZ25pbmdJZGVudGlmaWVyKGVycm9yKTsKKyAgICBi
b29sIGlzQ29kZVNpZ25lZCA9ICFjbGllbnRJZGVudGlmaWVyLmlzTnVsbCgpOworICAgIGlmIChp
c0NvZGVTaWduZWQgJiYgZXJyb3IpCisgICAgICAgIFdURkxvZ0Fsd2F5cygiQ291bGQgbm90IHRv
IGdldCBjb2RlIHNpZ25pbmcgaWRlbnRpZmllcjogJWxkXG4iLCBzdGF0aWNfY2FzdDxsb25nPihl
cnJvcikpOworI2VuZGlmCisgICAgaWYgKGNsaWVudElkZW50aWZpZXIuaXNFbXB0eSgpKQorICAg
ICAgICBjbGllbnRJZGVudGlmaWVyID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVu
dGlmaWVyXTsKIAogICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8geHBjX2Nvbm5lY3Rpb25fc2V0X2Jv
b3RzdHJhcCBvbmNlIGl0J3MgYXZhaWxhYmxlIGV2ZXJ5d2hlcmUgd2UgbmVlZC4KICAgICBhdXRv
IGJvb3RzdHJhcE1lc3NhZ2UgPSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0ZShu
dWxscHRyLCBudWxscHRyLCAwKSk7CkBAIC0xNDYsNyArMTU3LDcgQEAgc3RhdGljIHZvaWQgY29u
bmVjdFRvU2VydmljZShjb25zdCBQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5j
aE9wdGlvbnMKICAgICB4cGNfZGljdGlvbmFyeV9zZXRfbWFjaF9zZW5kKGJvb3RzdHJhcE1lc3Nh
Z2UuZ2V0KCksICJzZXJ2ZXItcG9ydCIsIGxpc3RlbmluZ1BvcnQpOwogICAgIG1hY2hfcG9ydF9k
ZWFsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIGxpc3RlbmluZ1BvcnQpOwogCi0gICAgeHBjX2Rp
Y3Rpb25hcnlfc2V0X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LWlkZW50
aWZpZXIiLCBjbGllbnRJZGVudGlmaWVyLmRhdGEoKSk7CisgICAgeHBjX2RpY3Rpb25hcnlfc2V0
X3N0cmluZyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAiY2xpZW50LWlkZW50aWZpZXIiLCAhY2xp
ZW50SWRlbnRpZmllci5pc0VtcHR5KCkgPyBjbGllbnRJZGVudGlmaWVyLnV0ZjgoKS5kYXRhKCkg
OiAqX05TR2V0UHJvZ25hbWUoKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmluZyhib290
c3RyYXBNZXNzYWdlLmdldCgpLCAidWktcHJvY2Vzcy1uYW1lIiwgW1tbTlNQcm9jZXNzSW5mbyBw
cm9jZXNzSW5mb10gcHJvY2Vzc05hbWVdIFVURjhTdHJpbmddKTsKIAogICAgIGlmIChmb3JEZXZl
bG9wbWVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDRkYTU3MWVhMDY0YzQ0OTI5OTJkZDM4Zjg4N2ZlNTUyNDBhOWZhYjIu
LjI5N2QyYTkzMzFmNTM1YTkwYzcwODlmNGVjMDA5NTg3ZjUyMTMxYjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3MTEsNiAr
MTcxMSw4IEBACiAJCUNEQzM4MzEwMTcyMTI0NDAwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hp
bS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzM4
MzBEMTcyMTI0MkQwMDhBMkZDMyAvKiBDb29raWVTdG9yYWdlU2hpbS5tbSAqLzsgfTsKIAkJQ0RD
QTg1QzgxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENBODVDNjEz
MkFCQTRFMDBFOTYxREYgLyogV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5tbSAqLzsgfTsK
IAkJQ0RDQTg1QzkxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0E4
NUM3MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmggKi87
IH07CisJCUNFMTFBRDUwMUNCQzQ3RjgwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMTFBRDRG
MUNCQzQ3RjgwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSAqLzsgfTsKKwkJQ0Ux
MUFENTIxQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTExQUQ1MTFDQkM0ODJGMDA2
ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMuaCAqLzsgfTsKIAkJQ0UxQTBCRDIxQTQ4RTZD
NjAwNTRFRjc0IC8qIEFzc2VydGlvblNlcnZpY2VzU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTFBMEJDQzFBNDhFNkM2MDA1NEVGNzQgLyogQXNz
ZXJ0aW9uU2VydmljZXNTUEkuaCAqLzsgfTsKIAkJQ0UxQTBCRDMxQTQ4RTZDNjAwNTRFRjc0IC8q
IENvcmVQREZTUEkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENFMUEwQkNEMUE0OEU2QzYwMDU0RUY3NCAvKiBDb3JlUERGU1BJLmggKi87IH07CiAJCUNF
MUEwQkQ0MUE0OEU2QzYwMDU0RUY3NCAvKiBEYXRhRGV0ZWN0b3JzVUlTUEkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFMUEwQkNFMUE0OEU2QzYwMDU0
RUY3NCAvKiBEYXRhRGV0ZWN0b3JzVUlTUEkuaCAqLzsgfTsKQEAgLTM3ODYsNiArMzc4OCw4IEBA
CiAJCUNEQ0E4NUM2MTMyQUJBNEUwMEU5NjFERiAvKiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9s
bGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RD
QTg1QzcxMzJBQkE0RTAwRTk2MURGIC8qIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDRENBODVENDEzMkFDMkIzMDBF
OTYxREYgLyogSU9LaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBJT0tpdC5mcmFtZXdv
cms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcms7IHNv
dXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CisJCUNFMTFBRDRGMUNCQzQ3RjgwMDY4MUVFNSAv
KiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IENvZGVTaWduaW5nVXRpbGl0aWVzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDRTExQUQ1MTFDQkM0ODJGMDA2ODFFRTUgLyogQ29kZVNpZ25pbmdVdGlsaXRpZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNpZ25pbmdVdGlsaXRpZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0UxQTBCQ0MxQTQ4RTZDNjAwNTRFRjc0
IC8qIEFzc2VydGlvblNlcnZpY2VzU1BJLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFzc2VydGlvblNlcnZpY2VzU1BJLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNFMUEwQkNEMUE0OEU2QzYwMDU0RUY3NCAvKiBDb3JlUERGU1BJLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvcmVQREZTUEkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQ0UxQTBCQ0UxQTQ4RTZDNjAwNTRFRjc0IC8qIERhdGFEZXRlY3RvcnNVSVNQSS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhRGV0ZWN0b3JzVUlTUEkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyMjMsNiArNjIyNyw4IEBACiAJCQkJRTFBMzE3
MzExMzRDRUE2QzAwN0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCAqLywKIAkJCQlFMUEzMTcz
NDEzNENFQTgwMDA3QzlBNEYgLyogQXR0cmlidXRlZFN0cmluZy5tbSAqLywKIAkJCQk5RjU0Rjg4
RTE2NDg4RTg3MDA3REY4MUEgLyogQ2hpbGRQcm9jZXNzTWFjLm1tICovLAorCQkJCUNFMTFBRDUx
MUNCQzQ4MkYwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5oICovLAorCQkJCUNFMTFB
RDRGMUNCQzQ3RjgwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSAqLywKIAkJCQkx
QTJBNEFGRTE1ODY5MzkyMDA5MEM5RTkgLyogQ29sb3JTcGFjZURhdGEuaCAqLywKIAkJCQkxQTJB
NEFGRDE1ODY5MzkyMDA5MEM5RTkgLyogQ29sb3JTcGFjZURhdGEubW0gKi8sCiAJCQkJQ0RDMzgz
MEUxNzIxMjQyRDAwOEEyRkMzIC8qIENvb2tpZVN0b3JhZ2VTaGltLmggKi8sCkBAIC03MzE5LDYg
KzczMjUsNyBAQAogCQkJCTUxRkFFQzNBMUIwNjU3NjMwMDA5QzRFNyAvKiBDaGlsZFByb2Nlc3NN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1MTNDNjcxNjZFQUJCMjAwMTQ5RkNCIC8q
IENoaWxkUHJvY2Vzc1Byb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTBGNDI3MjE3MkEwQzc0
MDA5MzlGRjAgLyogQ2hpbGRQcm9jZXNzU3VwcGxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0UxMUFENTIxQ0JDNDgyRjAwNjgxRUU1IC8qIENvZGVTaWduaW5nVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQTZGOUY5MDExRTEzRUZDMDBEQjEzNzEgLyogQ29tbWFuZExpbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTM3QkVDNEUxMTk0OTE0ODYwMDhCNDI4NiAvKiBDb21wbGV0aW9u
SGFuZGxlckNhbGxDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0M0RTlGNjEzMUM2RTdF
MDAyOUJENUEgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKQEAgLTg3NjEsNiArODc2OCw3IEBA
CiAJCQkJOUY1NEY4OEYxNjQ4OEU4NzAwN0RGODFBIC8qIENoaWxkUHJvY2Vzc01hYy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTUxRkFFQzNCMUIwNjU3NjgwMDA5QzRFNyAvKiBDaGlsZFByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1MTNDNjYxNjZFQUJCMjAw
MTQ5RkNCIC8qIENoaWxkUHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFMTFB
RDUwMUNCQzQ3RjgwMDY4MUVFNSAvKiBDb2RlU2lnbmluZ1V0aWxpdGllcy5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTFBMkE0QjBFMTU4NkEyMjQwMDkwQzlFOSAvKiBDb2xvclNwYWNlRGF0YS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFBNkY5RkI3MTFFMTQwODUwMERCMTM3MSAvKiBDb21tYW5kTGlu
ZVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3QkVDNEUwMTk0OTE0ODYwMDhCNDI4NiAv
KiBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyLm1tIGluIFNvdXJjZXMgKi8sCg==
</data>
<flag name="review"
          id="300488"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>