<?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>42317</bug_id>
          
          <creation_ts>2010-07-14 20:39:13 -0700</creation_ts>
          <short_desc>Pasteboard doesn&apos;t work in WebKit2</short_desc>
          <delta_ts>2010-09-24 18:37:32 -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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45494</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>251616</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-07-14 20:39:13 -0700</bug_when>
    <thetext>This makes at least the the following tests fail:

editing/pasteboard/copy-resolves-urls.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251617</commentid>
    <comment_count>1</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-07-14 20:39:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/7660537&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>254484</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-21 13:13:07 -0700</bug_when>
    <thetext>*** Bug 42780 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279847</commentid>
    <comment_count>3</comment_count>
      <attachid>67746</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-15 17:37:14 -0700</bug_when>
    <thetext>Created attachment 67746
Patch

This is not the full implementation, but it is a step forward.
The bug should not be resolved when this patch is reviewed and landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280144</commentid>
    <comment_count>4</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-16 09:29:52 -0700</bug_when>
    <thetext>Committed revision 67631</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280183</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-16 10:18:17 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/67631 might have broken Chromium Mac Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/67626
http://trac.webkit.org/changeset/67627
http://trac.webkit.org/changeset/67628
http://trac.webkit.org/changeset/67629
http://trac.webkit.org/changeset/67630
http://trac.webkit.org/changeset/67631</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280519</commentid>
    <comment_count>6</comment_count>
      <attachid>67878</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-16 20:23:32 -0700</bug_when>
    <thetext>Created attachment 67878
Patch2

Added RTF format support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280714</commentid>
    <comment_count>7</comment_count>
      <attachid>67878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-17 10:21:07 -0700</bug_when>
    <thetext>Comment on attachment 67878
Patch2

&gt; +        * loader/appcache/ApplicationCacheStorage.cpp:
&gt; +        (WebCore::ApplicationCacheStorage::setCacheDirectory): Remove assert
&gt; +        on the cachedirectory name, now that we can load a WebView also in the
&gt; +        Web process for WebKit2.

I don’t understand the connection. Could you explain further?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280722</commentid>
    <comment_count>8</comment_count>
      <attachid>67878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-17 10:33:56 -0700</bug_when>
    <thetext>Comment on attachment 67878
Patch2

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

I think the load of the other WebKit framework in WebKit2 should be dynamic. Under many circumstances we can use WebKit2 without ever needing to run this code. The code should only load the WebKit framework if it’s actually run.

Loading the WebKit framework for converting RTF seems OK. Loading it just to convert the URL seems like a bad idea, although perhaps OK for now.

&gt; WebKit2/WebProcess/WebPage/WebPage.h:53
&gt; +#ifdef __OBJC__
&gt; +@class NSAttributedString;
&gt; +@class NSString;
&gt; +@class NSURL;
&gt; +#else

Is this part needed? I know the !OBJC part is needed, but I thought that when compiling Obj-C we would always have the data types from Foundation included as part of the precompiled header.

&gt; WebKit2/WebProcess/WebPage/WebPage.h:158
&gt; +#if PLATFORM(MAC)
&gt; +    NSString* userVisibleString(NSURL*);
&gt; +    WebCore::DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector&lt;WebCore::ArchiveResource*&gt;&amp;);
&gt; +#endif

Do we really need to use the Cocoa types here? That makes this code Mac-specific when it could otherwise possibly be shared with other platforms like Windows when they use CF. What about the CF types, CFStringRef, CFURLRef, and CFAttributedStringRef? At least the first two are “toll-free bridged”.

The new code is inconsistent about the position of the &quot;*&quot; characters. Our strange rule is that Obj-C types always have a space before the *. I would like to change that rule in the future, but I would like you to be consistent within the patch at least, if possible.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:291
&gt; +static NSArray* excludedElementsForAttributedStringConversion()

A better style for this is to make a separate create function for the one time code, and then write:

    static NSArray *elements = createExcludedElementsArray();
    return elements;

It’s cleaner without the &quot;== nil&quot; and if statement and such.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:305
&gt; +    static NSArray *elements = nil;
&gt; +    if (elements == nil) {
&gt; +        elements = [[NSArray alloc] initWithObjects:
&gt; +                    // Omit style since we want style to be inline so the fragment can be easily inserted.
&gt; +                    @&quot;style&quot;,
&gt; +                    // Omit xml so the result is not XHTML.
&gt; +                    @&quot;xml&quot;, 
&gt; +                    // Omit tags that will get stripped when converted to a fragment anyway.
&gt; +                    @&quot;doctype&quot;, @&quot;html&quot;, @&quot;head&quot;, @&quot;body&quot;,
&gt; +                    // Omit deprecated tags.
&gt; +                    @&quot;applet&quot;, @&quot;basefont&quot;, @&quot;center&quot;, @&quot;dir&quot;, @&quot;font&quot;, @&quot;isindex&quot;, @&quot;menu&quot;, @&quot;s&quot;, @&quot;strike&quot;, @&quot;u&quot;,
&gt; +                    // Omit object so no file attachments are part of the fragment.
&gt; +                    @&quot;object&quot;, nil];

I understand that you were copying existing code, but typically we avoid code lined up with the previous lines like this, because it’s not friendly when renaming among other reasons.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:313
&gt; +    WebView* view = [[WebView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];

Calling the init method will call initWithFrame, so there’s no need to call initWithFrame:. Also, you can use NSEmptyRect in cases like this if you do need this rectangle.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:317
&gt; +    NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
&gt; +                                excludedElementsForAttributedStringConversion(), NSExcludedElementsDocumentAttribute,
&gt; +                                nil, @&quot;WebResourceHandler&quot;, nil];

Again, I prefer to avoid lining up like this.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:319
&gt; +    NSArray* s;

I much prefer words for local variable names over letters. I would name this “subresources”.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:324
&gt; +    NSEnumerator *e = [s objectEnumerator];

And this, “enumerator”.

Since this code doesn’t need to run on systems older than Snow Leopard, you can use Objective-C 2.0 style enumeration which is a lot cleaner. I don’t know the syntax myself, but I know it’s the preferred style.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:327
&gt; +        RefPtr&lt;ArchiveResource&gt;  ar = [r _coreResource];

There’s an extra space here. I don’t think you need to put this into a local variable. It would read better if you didn’t.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:328
&gt; +        resources.append(ar.get());

Why is resources an array of raw pointers? What guarantees the ArchiveResource objects will stay alive? I think it probably needs to be a vector of RefPtr, unless I’m missing something.

&gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:338
&gt; +NSString* WebPage::userVisibleString(NSURL* URL)
&gt; +{
&gt; +    return [URL _web_userVisibleString];
&gt; +}

I don’t understand why we are indirecting here through a WebPage function. Why can’t WebEditorClient just call this function directly?

In fact, in both cases I am a little puzzled. It seems that putting this code into WebPage just makes WebPage more of a god class. Perhaps there’s a way we can avoid this. These functions don’t seem to rely on being members of WebPage, so they could be static members if they are going to be members, but I am not sure they get any benefit from being class members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280866</commentid>
    <comment_count>9</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-17 14:27:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think the load of the other WebKit framework in WebKit2 should be dynamic. Under many circumstances we can use WebKit2 without ever needing to run this code. The code should only load the WebKit framework if it’s actually run.

We changed that now. The next patch will not do that.
 
&gt; Loading the WebKit framework for converting RTF seems OK. Loading it just to convert the URL seems like a bad idea, although perhaps OK for now.
&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/WebPage.h:53
&gt; &gt; +#ifdef __OBJC__
&gt; &gt; +@class NSAttributedString;
&gt; &gt; +@class NSString;
&gt; &gt; +@class NSURL;
&gt; &gt; +#else
&gt; 
&gt; Is this part needed? I know the !OBJC part is needed, but I thought that when compiling Obj-C we would always have the data types from Foundation included as part of the precompiled header.

You&apos;re right, I just followed another example, but I tried what you&apos;re saying and it&apos;s not necessary when __OBJC__.
 
&gt; &gt; WebKit2/WebProcess/WebPage/WebPage.h:158
&gt; &gt; +#if PLATFORM(MAC)
&gt; &gt; +    NSString* userVisibleString(NSURL*);
&gt; &gt; +    WebCore::DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector&lt;WebCore::ArchiveResource*&gt;&amp;);
&gt; &gt; +#endif
&gt; 
&gt; Do we really need to use the Cocoa types here? That makes this code Mac-specific when it could otherwise possibly be shared with other platforms like Windows when they use CF. What about the CF types, CFStringRef, CFURLRef, and CFAttributedStringRef? At least the first two are “toll-free bridged”.
&gt; 
I didn&apos;t know this was possible.

&gt; The new code is inconsistent about the position of the &quot;*&quot; characters. Our strange rule is that Obj-C types always have a space before the *. I would like to change that rule in the future, but I would like you to be consistent within the patch at least, if possible.
&gt;

I&apos;m not sure I understand what you want me to do here. No space before * for C++ and space before * for obj-c?
 
&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:291
&gt; &gt; +static NSArray* excludedElementsForAttributedStringConversion()
&gt; 
&gt; A better style for this is to make a separate create function for the one time code, and then write:
&gt; 
&gt;     static NSArray *elements = createExcludedElementsArray();
&gt;     return elements;
&gt; 
&gt; It’s cleaner without the &quot;== nil&quot; and if statement and such.
&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:305
&gt; &gt; +    static NSArray *elements = nil;
&gt; &gt; +    if (elements == nil) {
&gt; &gt; +        elements = [[NSArray alloc] initWithObjects:
&gt; &gt; +                    // Omit style since we want style to be inline so the fragment can be easily inserted.
&gt; &gt; +                    @&quot;style&quot;,
&gt; &gt; +                    // Omit xml so the result is not XHTML.
&gt; &gt; +                    @&quot;xml&quot;, 
&gt; &gt; +                    // Omit tags that will get stripped when converted to a fragment anyway.
&gt; &gt; +                    @&quot;doctype&quot;, @&quot;html&quot;, @&quot;head&quot;, @&quot;body&quot;,
&gt; &gt; +                    // Omit deprecated tags.
&gt; &gt; +                    @&quot;applet&quot;, @&quot;basefont&quot;, @&quot;center&quot;, @&quot;dir&quot;, @&quot;font&quot;, @&quot;isindex&quot;, @&quot;menu&quot;, @&quot;s&quot;, @&quot;strike&quot;, @&quot;u&quot;,
&gt; &gt; +                    // Omit object so no file attachments are part of the fragment.
&gt; &gt; +                    @&quot;object&quot;, nil];
&gt; 
&gt; I understand that you were copying existing code, but typically we avoid code lined up with the previous lines like this, because it’s not friendly when renaming among other reasons.
&gt; 

As you said, I copied the code and I assumed that, since it was in, it was ok. What kind of alignment should I use here?

&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:313
&gt; &gt; +    WebView* view = [[WebView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];
&gt; 
&gt; Calling the init method will call initWithFrame, so there’s no need to call initWithFrame:. Also, you can use NSEmptyRect in cases like this if you do need this rectangle.
&gt; 

Not applicable anymore, since there is no WebView.

&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:319
&gt; &gt; +    NSArray* s;
&gt; 
&gt; I much prefer words for local variable names over letters. I would name this “subresources”.
&gt;

Ok.
 
&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:324
&gt; &gt; +    NSEnumerator *e = [s objectEnumerator];
&gt; 
&gt; And this, “enumerator”.
&gt; 
&gt; Since this code doesn’t need to run on systems older than Snow Leopard, you can use Objective-C 2.0 style enumeration which is a lot cleaner. I don’t know the syntax myself, but I know it’s the preferred style.
&gt;

I&apos;ll look it up.
 
&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:327
&gt; &gt; +        RefPtr&lt;ArchiveResource&gt;  ar = [r _coreResource];
&gt; 
&gt; There’s an extra space here. I don’t think you need to put this into a local variable. It would read better if you didn’t.
&gt;

ok.
 
&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:328
&gt; &gt; +        resources.append(ar.get());
&gt; 
&gt; Why is resources an array of raw pointers? What guarantees the ArchiveResource objects will stay alive? I think it probably needs to be a vector of RefPtr, unless I’m missing something.
&gt; 

You&apos;re probably right. It got lost in the WebKit to WebCore conversion. I&apos;ll check the WebKit version I checked in at the beginning of the week to verify if the same problem is there.

&gt; &gt; WebKit2/WebProcess/WebPage/mac/WebPageMac.mm:338
&gt; &gt; +NSString* WebPage::userVisibleString(NSURL* URL)
&gt; &gt; +{
&gt; &gt; +    return [URL _web_userVisibleString];
&gt; &gt; +}
&gt; 
&gt; I don’t understand why we are indirecting here through a WebPage function. Why can’t WebEditorClient just call this function directly?

I don&apos;t know how to call obj-c from a cpp file.

&gt; 
&gt; In fact, in both cases I am a little puzzled. It seems that putting this code into WebPage just makes WebPage more of a god class. Perhaps there’s a way we can avoid this. These functions don’t seem to rely on being members of WebPage, so they could be static members if they are going to be members, but I am not sure they get any benefit from being class members.

Same reason as above.
Is it possible to do so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281001</commentid>
    <comment_count>10</comment_count>
      <attachid>67975</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-17 17:09:28 -0700</bug_when>
    <thetext>Created attachment 67975
Patch3

No more use of WebView nor linking of WebKit.
I believe I&apos;ve addressed all the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281217</commentid>
    <comment_count>11</comment_count>
      <attachid>67975</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-18 16:58:49 -0700</bug_when>
    <thetext>Comment on attachment 67975
Patch3

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

&gt; WebCore/loader/EmptyClients.h:438
&gt; +    virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector&lt; RefPtr&lt;ArchiveResource&gt; &gt;&amp;) { return 0; };

No space before the RefPtr is needed.

&gt; WebCore/page/EditorClient.h:156
&gt; +    virtual DocumentFragment* documentFragmentFromAttributedString(NSAttributedString*, Vector&lt; RefPtr&lt;ArchiveResource&gt; &gt;&amp;) = 0;

Here too.

&gt; WebCore/platform/mac/PasteboardMac.mm:410
&gt; +    Vector&lt; RefPtr&lt;ArchiveResource&gt; &gt; resources;

And here.

&gt; WebKit2/WebProcess/WebCoreSupport/mac/WebEditorClientMac.mm:84
&gt; +DocumentFragment* WebEditorClient::documentFragmentFromAttributedString(NSAttributedString *string, Vector&lt; RefPtr&lt;ArchiveResource&gt; &gt;&amp; resources)
&gt; +{

And here.

&gt; WebKit/mac/WebCoreSupport/WebEditorClient.mm:362
&gt; +DocumentFragment* WebEditorClient::documentFragmentFromAttributedString(NSAttributedString *string, Vector&lt; RefPtr&lt;ArchiveResource&gt; &gt;&amp; resources)
&gt;  {

And here,


Otherwise, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281678</commentid>
    <comment_count>12</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-20 11:14:13 -0700</bug_when>
    <thetext>Committed patch3. http://trac.webkit.org/changeset/67864</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284104</commentid>
    <comment_count>13</comment_count>
      <attachid>68622</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-23 16:52:01 -0700</bug_when>
    <thetext>Created attachment 68622
Patch4

Last piece.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284132</commentid>
    <comment_count>14</comment_count>
      <attachid>68622</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-23 17:23:50 -0700</bug_when>
    <thetext>Comment on attachment 68622
Patch4

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

Looks like a good general approach, but there are some things that are not quite right.

&gt; WebKit2/UIProcess/PageClient.h:54
&gt; +    virtual void enableMenuItem(const String&amp; commandName, bool isEnabled) = 0;

While this terminology is used in Windows APIs -- a function named &quot;enable&quot; that sets whether an item is enabled or not -- I have always found it awkward. Cocoa APIs call this &quot;setEnabled&quot;, which would lead to the name setMenuItemEnabled. But also, is this really specific to menu items? Maybe this should be named setEditCommandEnabled.

&gt; WebKit2/UIProcess/WebPageProxy.h:135
&gt; +    void editingCommand(const String&amp; commandName);

Since this function performs and operation, its name should be a verb phrase, not a noun phrase. It could be executeEditingCommand, or you could find some other verb. But just &quot;editing command&quot; seems wrong.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:157
&gt; +typedef HashMap&lt;SEL, String&gt; SelectorNameMap;

Does this type of HashMap work correctly? For selectors, we can use pointer equality rather than string equality. I think you may need to specify PtrHash explicitly to get the right behavior. I’m not sure exactly what type SEL is.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:161
&gt; +static const SelectorNameMap* createSelectorExceptionMap()

It might be nicer to use PassOwnPtr here and call leak at the call site. Or use &quot;leak&quot; in the name of the function.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:197
&gt; +#define WEBCORE_COMMAND(command, name) - (void)command:(id)sender { _data-&gt;_page-&gt;editingCommand(commandNameForSelector(_cmd)); }

What is the name argument for? It’s not used!

&gt; WebKit2/UIProcess/API/mac/WKView.mm:213
&gt; +    if (_data-&gt;_menuMap.isEmpty()) {

If the menu map is non-empty there’s no guarantee that the item is another menu item from the same menu. This code assumes that validateUserInterfaceItem: is called only for menu items within one menu at a time, but that’s wrong since it’s called for things that are not menu items and can be called for more than one menu at a time.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:216
&gt; +        _data-&gt;_currentMenu = [(NSMenuItem *)item menu];

The item is not guaranteed to be a menu item. It could be a toolbar button, for example. So this cast is not correct. You could get method-not-found.

We can’t just keep a pointer to an NSMenu *. It might be deallocated and we could use a freed pointer later! If we want to keep a pointer to it we have to retain it.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:218
&gt; +    if (m_page-&gt;focusController()-&gt;focusedOrMainFrame())
&gt; +        m_page-&gt;focusController()-&gt;focusedOrMainFrame()-&gt;editor()-&gt;command(commandName).execute(argument);

Normally in WebKit code we do an early exit:

    Frame* frame = m_page-&gt;focusController()-&gt;focusedOrMainFrame();
    if (!frame)
        return;

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:224
&gt; +    if (frame) {

Same thing here. Early exist is the normal pattern.

&gt; WebKit2/WebProcess/WebPage/WebPage.cpp:227
&gt; +        if (command.isSupported())
&gt; +            return command.isEnabled();

This can just say:

    return command.isSupported() &amp;&amp; command.isEnabled();

But do we have to check both? Isn’t isEnabled guaranteed to return false if isSupported is false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284137</commentid>
    <comment_count>15</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-23 17:27:38 -0700</bug_when>
    <thetext>Attachment 68622 did not build on qt:
Build output: http://queues.webkit.org/results/4079093</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284149</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-23 17:43:33 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:157
&gt; &gt; +typedef HashMap&lt;SEL, String&gt; SelectorNameMap;
&gt; 
&gt; Does this type of HashMap work correctly? For selectors, we can use pointer equality rather than string equality. I think you may need to specify PtrHash explicitly to get the right behavior. I’m not sure exactly what type SEL is.

SEL is defined as typedef struct objc_selector 	*SEL; so this should work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284157</commentid>
    <comment_count>17</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-23 18:00:15 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; While this terminology is used in Windows APIs -- a function named &quot;enable&quot; that sets whether an item is enabled or not -- I have always found it awkward. Cocoa APIs call this &quot;setEnabled&quot;, which would lead to the name setMenuItemEnabled. But also, is this really specific to menu items? Maybe this should be named setEditCommandEnabled.

I will change it.
&gt; 
&gt; &gt; WebKit2/UIProcess/WebPageProxy.h:135
&gt; &gt; +    void editingCommand(const String&amp; commandName);
&gt; 
&gt; Since this function performs and operation, its name should be a verb phrase, not a noun phrase. It could be executeEditingCommand, or you could find some other verb. But just &quot;editing command&quot; seems wrong.
&gt; 

I agree, I will change it.
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:157
&gt; &gt; +typedef HashMap&lt;SEL, String&gt; SelectorNameMap;
&gt; 
&gt; Does this type of HashMap work correctly? For selectors, we can use pointer equality rather than string equality. I think you may need to specify PtrHash explicitly to get the right behavior. I’m not sure exactly what type SEL is.
&gt;

I&apos;ve copied this code from WebKit. I assumed this was correct and I&apos;ve looked at the definition of SEL.
I believe this is correct, also per Sam&apos;s comment.
 
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:161
&gt; &gt; +static const SelectorNameMap* createSelectorExceptionMap()
&gt; 
&gt; It might be nicer to use PassOwnPtr here and call leak at the call site. Or use &quot;leak&quot; in the name of the function.

Again, this is existing WebKit code, that I always assume is correct.

&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:197
&gt; &gt; +#define WEBCORE_COMMAND(command, name) - (void)command:(id)sender { _data-&gt;_page-&gt;editingCommand(commandNameForSelector(_cmd)); }
&gt; 

&gt; What is the name argument for? It’s not used!
Sorry, leftover of a previous version of my implementation. Will remove it.

&gt; 
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:213
&gt; &gt; +    if (_data-&gt;_menuMap.isEmpty()) {
&gt; 
&gt; If the menu map is non-empty there’s no guarantee that the item is another menu item from the same menu. This code assumes that validateUserInterfaceItem: is called only for menu items within one menu at a time, but that’s wrong since it’s called for things that are not menu items and can be called for more than one menu at a time.
&gt;
You&apos;re right. I&apos;ll fix it.
 
&gt; &gt; WebKit2/UIProcess/API/mac/WKView.mm:216
&gt; &gt; +        _data-&gt;_currentMenu = [(NSMenuItem *)item menu];
&gt; 
&gt; The item is not guaranteed to be a menu item. It could be a toolbar button, for example. So this cast is not correct. You could get method-not-found.

I didn&apos;t know. I will change this per our conversation.

&gt; We can’t just keep a pointer to an NSMenu *. It might be deallocated and we could use a freed pointer later! If we want to keep a pointer to it we have to retain it.
&gt;
Same as above.
 
&gt; &gt; WebKit2/WebProcess/WebPage/WebPage.cpp:218
&gt; &gt; +    if (m_page-&gt;focusController()-&gt;focusedOrMainFrame())
&gt; &gt; +        m_page-&gt;focusController()-&gt;focusedOrMainFrame()-&gt;editor()-&gt;command(commandName).execute(argument);
&gt; 
&gt; Normally in WebKit code we do an early exit:
&gt; 
&gt;     Frame* frame = m_page-&gt;focusController()-&gt;focusedOrMainFrame();
&gt;     if (!frame)
&gt;         return;
&gt; 
&gt; &gt; WebKit2/WebProcess/WebPage/WebPage.cpp:224
&gt; &gt; +    if (frame) {
&gt; 
&gt; Same thing here. Early exist is the normal pattern.
&gt;

I can change this.
 
&gt; &gt; WebKit2/WebProcess/WebPage/WebPage.cpp:227
&gt; &gt; +        if (command.isSupported())
&gt; &gt; +            return command.isEnabled();
&gt; 
&gt; This can just say:
&gt; 
&gt;     return command.isSupported() &amp;&amp; command.isEnabled();
&gt; 
&gt; But do we have to check both? Isn’t isEnabled guaranteed to return false if isSupported is false?

I followed what WebKit does. I will double-check if it is really needed.
Thank you for all the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284839</commentid>
    <comment_count>18</comment_count>
      <attachid>68788</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-24 16:29:08 -0700</bug_when>
    <thetext>Created attachment 68788
Patch5

This patch addresses all the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284857</commentid>
    <comment_count>19</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-09-24 17:05:45 -0700</bug_when>
    <thetext>Attachment 68788 did not build on qt:
Build output: http://queues.webkit.org/results/4021153</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284867</commentid>
    <comment_count>20</comment_count>
      <attachid>68788</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-24 17:25:38 -0700</bug_when>
    <thetext>Comment on attachment 68788
Patch5

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

This patch seems to break the Qt WebKit2. If you resolve that seems OK to land.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:72
&gt; +        MenuItemInfo(): _isEnabled(false), _state(0) {};
&gt; +        MenuItemInfo(bool isEnabled, int state): _isEnabled(isEnabled), _state(state) {};

Need a space before the &quot;:&quot;. No semicolon needed after the &quot;{}&quot;. We normally put a space in the &quot;{ }&quot;.

You call this EditCommandState in the PageClient API. Why not call it that here too?

No need for underscores in this class’s members. We normally don’t use them for struct-style classes like this one. We do use them for Objective-C classes.

I suggest struct instead of class for something where everything is public.

Not sure it’s good to nest a C++ class inside an Objective-C class definition. I suggest putting it outside WKViewData.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:207
&gt; +// FIXME: we should add here all the commands as we implement them.

Grammar mistake. Should be &quot;We should add all the commands here as we implement them.&quot;

&gt; WebKit2/UIProcess/API/mac/WKView.mm:227
&gt; +        return NO;      // FIXME: we need to be able to handle other user interface elements.

We capitalize comments, using sentence style. We normally put comments only one space past the code, not 6 spaces.

&gt; WebKit2/UIProcess/API/mac/WKView.mm:496
&gt; +    _data-&gt;_needsDataForValidation = false;

I think the “needs data for validation” mechanism is a bit roundabout. We could try replacing it with a boolean that means “I am inside the update call” instead to see if that results in easier to read code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284903</commentid>
    <comment_count>21</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2010-09-24 18:37:32 -0700</bug_when>
    <thetext>Committed revision 68318.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67746</attachid>
            <date>2010-09-15 17:37:14 -0700</date>
            <delta_ts>2010-09-15 23:40:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>pasteboard-first.txt</filename>
            <type>text/plain</type>
            <size>8044</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzU4NSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMTUgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXN0ZWJvYXJkIGRvZXNuJ3Qgd29yayBpbiBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzc2NjA1Mzc+CisgICAgICAgIAorICAgICAgICBJbml0aWFsIHdvcmsgdG8gc3VwcG9ydCBjdXQs
IGNvcHksIHBhc3RlIGFuZCBzZWxlY3RBbGwgaW4gV2ViS2l0Mi4KKyAgICAgICAgSXQgc3RpbGwg
ZG9lcyBub3Qgc3VwcG9ydCBSVEYgYW5kIFJURkQgZm9ybWF0IGZvciBNYWMgYW5kIHRoZSBzZWxl
Y3RpdmUKKyAgICAgICAgZW5hYmxpbmcgb2YgdGhlIGVkaXRpbmcgbWVudSBlbnRyaWVzLgorICAg
ICAgICAKKyAgICAgICAgKiBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZU1lc3NhZ2VLaW5k
cy5oOiBBZGRlZCBtZXNzYWdlcyB0byBzdXBwb3J0IHRoZQorICAgICAgICBuZXcgZWRpdGluZyBj
b21tYW5kcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAg
ICgtW1dLVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOiBBZGRlZC4KKyAgICAgICAg
KC1bV0tWaWV3IGNvcHk6XSk6IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgY3V0Ol0pOiBBZGRl
ZC4KKyAgICAgICAgKC1bV0tWaWV3IHBhc3RlOl0pOiBBZGRkZWQuCisgICAgICAgICgtW1dLVmll
dyBzZWxlY3RBbGw6XSk6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOiBBZGRlZCBhbGwgdGhlIHByb3h5IG1ldGhvZHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6c2VsZWN0QWxsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpjb3B5
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjdXQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OnBhc3RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRG
cm9tQXR0cmlidXRlZFN0cmluZyk6IEFkZGVkIGJ1dCBub3QKKyAgICAgICAgaW1wbGVtZW50ZWQu
IFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBvcnQgUlRGIGFuZCBSVEZELgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OnNldEluc2VydGlvblBhc3RlYm9hcmQpOiBBZGRlZCBidXQgbm90
IGltcGxlbWVudGVkLgorICAgICAgICBUaGlzIGlzIG5lZWRlZCBvbmx5IHRvIHN1cHBvcnQgTWFp
bCBvbiB0aGUgTWFjLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDog
QWRkZWQgYWxsIHRoZSBzdHViIG1ldGhvZHMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNl
bGVjdEFsbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvcHkpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpjdXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwYXN0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKTogTW9kaWZpZWQgdG8g
aGFuZGxlIHRoZSBuZXcgbWVzc2FnZXMgZnJvbQorICAgICAgICB0aGUgVUkgcHJvY2Vzcy4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorCiAyMDEwLTA5LTE1ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5
Y3V0dC4KSW5kZXg6IFdlYktpdDIvU2hhcmVkL0NvcmVJUENTdXBwb3J0L1dlYlBhZ2VNZXNzYWdl
S2luZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQ
YWdlTWVzc2FnZUtpbmRzLmgJKHJldmlzaW9uIDY3NTYyKQorKysgV2ViS2l0Mi9TaGFyZWQvQ29y
ZUlQQ1N1cHBvcnQvV2ViUGFnZU1lc3NhZ2VLaW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2
ICs1OCwxMCBAQCBlbnVtIEtpbmQgewogICAgIFNldFRleHRab29tRmFjdG9yLAogICAgIFN0b3BM
b2FkaW5nLAogICAgIFRyeUNsb3NlLAorICAgIFNlbGVjdEFsbCwKKyAgICBDb3B5LAorICAgIEN1
dCwKKyAgICBQYXN0ZSwKICAgICBVbmFwcGx5RWRpdENvbW1hbmQsCiAgICAgV2hlZWxFdmVudAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHJldmlzaW9uIDY3NTYyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiwzOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0QWN0aXZlKGJvb2wgYWN0aXZlCiAgICAgcHJvY2VzcygpLT5zZW5kKFdlYlBhZ2VNZXNzYWdl
OjpTZXRBY3RpdmUsIG1fcGFnZUlELCBDb3JlSVBDOjpJbihhY3RpdmUpKTsKIH0KIAordm9pZCBX
ZWJQYWdlUHJveHk6OnNlbGVjdEFsbCgpCit7CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIHByb2Nlc3MoKS0+c2VuZChXZWJQYWdlTWVzc2FnZTo6U2VsZWN0QWxs
LCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oKSk7Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5Ojpjb3B5
KCkKK3sKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJvY2Vz
cygpLT5zZW5kKFdlYlBhZ2VNZXNzYWdlOjpDb3B5LCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oKSk7
Cit9CisKK3ZvaWQgV2ViUGFnZVByb3h5OjpjdXQoKQoreworICAgIGlmICghaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBwcm9jZXNzKCktPnNlbmQoV2ViUGFnZU1lc3NhZ2U6OkN1
dCwgbV9wYWdlSUQsIENvcmVJUEM6OkluKCkpOworfQorCit2b2lkIFdlYlBhZ2VQcm94eTo6cGFz
dGUoKQoreworICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBwcm9j
ZXNzKCktPnNlbmQoV2ViUGFnZU1lc3NhZ2U6OlBhc3RlLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4o
KSk7Cit9CisgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0SXNJbldpbmRvdyhib29sIGlzSW5X
aW5kb3cpCiB7CiAgICAgaWYgKG1faXNJbldpbmRvdyA9PSBpc0luV2luZG93KQpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDY3NTYyKQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTEgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHNldElzSW5X
aW5kb3coYm9vbCBpc0luV2luZG93KTsKIAorICAgIHZvaWQgc2VsZWN0QWxsKCk7CisgICAgdm9p
ZCBjb3B5KCk7CisgICAgdm9pZCBjdXQoKTsKKyAgICB2b2lkIHBhc3RlKCk7CisgICAgCiAgICAg
dm9pZCBtb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2b2lkIHdoZWVsRXZl
bnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOwogICAgIHZvaWQga2V5RXZlbnQoY29uc3QgV2ViS2V5
Ym9hcmRFdmVudCYpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlz
aW9uIDY3NTYyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTE0Niw2ICsxNDYsMzQgQEAgLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6
ZSlzaXplCiAgICAgX2RhdGEtPl9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUo
c2l6ZSkpOwogfQogCistIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1Zh
bGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilpdGVtCit7CisgICAgLy8gRklYTUU6IHRoaXMgbmVl
ZHMgdG8gYmUgaW1wbGVtZW50ZWQKKyAgICByZXR1cm4gWUVTOworfQorCisvLyBFZGl0aW5nIGNv
bW1hbmRzCisKKy0gKHZvaWQpY29weTooaWQpc2VuZGVyCit7IAorICAgIF9kYXRhLT5fcGFnZS0+
Y29weSgpOworfQorCistICh2b2lkKWN1dDooaWQpc2VuZGVyCit7IAorICAgIF9kYXRhLT5fcGFn
ZS0+Y3V0KCk7Cit9CisKKy0gKHZvaWQpcGFzdGU6KGlkKXNlbmRlcgoreyAKKyAgICBfZGF0YS0+
X3BhZ2UtPnBhc3RlKCk7Cit9CisKKy0gKHZvaWQpc2VsZWN0QWxsOihpZClzZW5kZXIKK3sKKyAg
ICBfZGF0YS0+X3BhZ2UtPnNlbGVjdEFsbCgpOworfQorCiAvLyBFdmVudHMKIAogLy8gT3ZlcnJp
ZGUgdGhpcyBzbyB0aGF0IEFwcEtpdCB3aWxsIHNlbmQgdXMgYXJyb3cga2V5cyBhcyBrZXkgZG93
biBldmVudHMgc28gd2UgY2FuCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gNjc1NjIpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzE4LDEyICszMTgsMTQgQEAgTlNTdHJpbmcqIFdlYkVkaXRvckNsaWVu
dDo6dXNlclZpc2libGVTdAogRG9jdW1lbnRGcmFnbWVudCogV2ViRWRpdG9yQ2xpZW50Ojpkb2N1
bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiwgVmVj
dG9yPEFyY2hpdmVSZXNvdXJjZSo+JikKIHsKICAgICAvLyBGSVhNRTogYWRkIGNvZGUgaGVyZSB0
byBjcmVhdGUgZmFrZSBXZWJWaWV3IGFuZCBsb2FkIFdlYktpdCAxCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IFJURiBhbmQgUlRGRCBpbiB0
aGUgcGFzdGVib2FyZAogICAgIHJldHVybiAwOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQqKQogeworICAgIC8vIFRoaXMgaXMg
dXNlZCBvbmx5IGJ5IE1haWwsIG5vIG5lZWQgdG8gaW1wbGVtZW50IGl0IG5vdy4KKyAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKSW5kZXg6IFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA2NzU2MikKKysrIFdlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzIs
NiArNDMyLDMwIEBAIHZvaWQgV2ViUGFnZTo6a2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmQKICAg
ICAodm9pZCloYW5kbGVkOwogfQogCit2b2lkIFdlYlBhZ2U6OnNlbGVjdEFsbCgpCit7CisgICAg
aWYgKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpKQorICAg
ICAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdEFsbCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvcHkoKQoreworICAg
IGlmIChtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSkKKyAg
ICAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVk
aXRvcigpLT5jb3B5KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y3V0KCkKK3sKKyAgICBpZiAobV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCisgICAgICAgIG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+
Y3V0KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6cGFzdGUoKQoreworICAgIGlmIChtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSkKKyAgICAgICAgbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5wYXN0ZSgp
OworfSAgICAKKyAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBXZWJQYWdlOjp0
b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkBAIC02NjYsNiAr
NjkwLDIyIEBAIHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzoKICAgICAg
ICAgICAgIGtleUV2ZW50KGV2ZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
ICAgICAgICBjYXNlIFdlYlBhZ2VNZXNzYWdlOjpTZWxlY3RBbGw6IHsKKyAgICAgICAgICAgIHNl
bGVjdEFsbCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
V2ViUGFnZU1lc3NhZ2U6OkNvcHk6IHsKKyAgICAgICAgICAgIGNvcHkoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFdlYlBhZ2VNZXNzYWdlOjpDdXQ6IHsK
KyAgICAgICAgICAgIGN1dCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgV2ViUGFnZU1lc3NhZ2U6OlBhc3RlOiB7CisgICAgICAgICAgICBwYXN0ZSgpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9ICAgICAgICAgICAgCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKICAgICAgICAgY2FzZSBXZWJQYWdlTWVzc2FnZTo6VG91Y2hFdmVudDogewog
ICAgICAgICAgICAgV2ViVG91Y2hFdmVudCBldmVudDsKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDY3NTYyKQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBtb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKICAgICB2b2lk
IHdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOwogICAgIHZvaWQga2V5RXZlbnQoY29u
c3QgV2ViS2V5Ym9hcmRFdmVudCYpOworICAgIHZvaWQgc2VsZWN0QWxsKCk7CisgICAgdm9pZCBj
b3B5KCk7CisgICAgdm9pZCBjdXQoKTsKKyAgICB2b2lkIHBhc3RlKCk7CiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKICAgICB2b2lkIHRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYpOwog
I2VuZGlmCg==
</data>
<flag name="review"
          id="57137"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67878</attachid>
            <date>2010-09-16 20:23:32 -0700</date>
            <delta_ts>2010-09-17 17:09:28 -0700</delta_ts>
            <desc>Patch2</desc>
            <filename>more-paste.txt</filename>
            <type>text/plain</type>
            <size>12869</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzY5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDktMTYgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXN0ZWJvYXJkIGRvZXNuJ3Qgd29yayBpbiBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzc2NjA1Mzc+CisKKyAgICAgICAgKiBsb2FkZXIvYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0
b3JhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25DYWNoZVN0b3JhZ2U6OnNl
dENhY2hlRGlyZWN0b3J5KTogUmVtb3ZlIGFzc2VydAorICAgICAgICBvbiB0aGUgY2FjaGVkaXJl
Y3RvcnkgbmFtZSwgbm93IHRoYXQgd2UgY2FuIGxvYWQgYSBXZWJWaWV3IGFsc28gaW4gdGhlCisg
ICAgICAgIFdlYiBwcm9jZXNzIGZvciBXZWJLaXQyLgorCiAyMDEwLTA5LTE2ICBLZW5uZXRoIFJ1
c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2Jp
bnNvbi4KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlv
bkNhY2hlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDY3Njc2KQorKysgV2ViQ29yZS9sb2FkZXIvYXBw
Y2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEs
OSArMzUxLDYgQEAgdm9pZCBBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZTo6Y2FjaGVHcm91cAogCiB2
b2lkIEFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlOjpzZXRDYWNoZURpcmVjdG9yeShjb25zdCBTdHJp
bmcmIGNhY2hlRGlyZWN0b3J5KQogewotICAgIEFTU0VSVChtX2NhY2hlRGlyZWN0b3J5LmlzTnVs
bCgpKTsKLSAgICBBU1NFUlQoIWNhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKTsKLSAgICAKICAgICBt
X2NhY2hlRGlyZWN0b3J5ID0gY2FjaGVEaXJlY3Rvcnk7CiB9CiAKSW5kZXg6IFdlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NzY5MCkK
KysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIw
MTAtMDktMTYgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXN0ZWJvYXJkIGRvZXNuJ3Qg
d29yayBpbiBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDIzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2NjA1Mzc+CisKKyAgICAg
ICAgQWRkaW5nIHN1cHBvcnQgZm9yIFJURiwgUlRGRCBhbmQgTlNVcmwgZm9ybWF0cyBvbiB0aGUg
TWFjLgorICAgICAgICBTdGlsbCBtaXNzaW5nIHRoZSBzZWxlY3RpdmUgZW5hYmxpbmcgb2YgdGhl
IG1lbnUgZW50cmllcy4KKyAgICAgICAgCisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOiBOb3cgbGlua2luZyBhZ2FpbnN0IFdlYktpdCBhbHNvLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyk6IEFkZGVkIGNhbGwg
dG8gcGxhdGZvcm0KKyAgICAgICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3Ry
aW5nKTogQWRkZWQgY2FsbCB0byBwbGF0Zm9ybQorICAgICAgICBzcGVjaWZpYyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6
ZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKTogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0
cmluZyk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1c2VyVmlzaWJsZVN0cmlu
Zyk6IEFkZGVkLgorCiAyMDEwLTA5LTE2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJL
aXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY3Njc2KQorKysgV2ViS2l0
Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM0
Niw2ICszNDYsOCBAQAogCQlDMEUzQUE3QTEyMDlFODMwMDBBNDlEMDEgLyogTW9kdWxlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBFM0FBNDgx
MjA5RTQ1MDAwQTQ5RDAxIC8qIE1vZHVsZU1hYy5tbSAqLzsgfTsKIAkJQzBFM0FBN0IxMjA5RTgz
NTAwQTQ5RDAxIC8qIE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmNwcCAqLzsg
fTsKIAkJQzBFM0FBN0MxMjA5RTgzQzAwQTQ5RDAxIC8qIE1vZHVsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzBFM0FBNDQxMjA5RTJCQTAwQTQ5RDAx
IC8qIE1vZHVsZS5oICovOyB9OworCQlDNTc1QTJFMjEyNDJGOEFGMDBDQjdGMkMgLyogV2ViS2l0
LmZyYW1ld29yayBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzU3NUEyRTExMjQyRjhBRjAwQ0I3RjJDIC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CisJ
CUM1NzVBNDhDMTI0MkY5NUMwMENCN0YyQyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29y
a3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzU3NUEyRTExMjQyRjhBRjAw
Q0I3RjJDIC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCUQzQjk0ODQ2MTFGRjRCNjUwMDAz
MkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRDNCOTQ4NDIxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5j
cHAgKi87IH07CiAJCUQzQjk0ODQ3MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQzMTFG
RjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCAqLzsgfTsKIAkJRDNCOTQ4NDgxMUZGNEI2
NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2Vi
U2VhcmNoUG9wdXBNZW51LmNwcCAqLzsgfTsKQEAgLTM4OCw2ICszOTAsNyBAQAogCQkJZHN0U3Vi
Zm9sZGVyU3BlYyA9IDE7CiAJCQlmaWxlcyA9ICgKIAkJCQkxQTUwREI2NjExMEEzRDU3MDAwRDNG
RTUgLyogV2ViUHJvY2Vzcy5hcHAgaW4gQ29weUZpbGVzICovLAorCQkJCUM1NzVBMkUyMTI0MkY4
QUYwMENCN0YyQyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIENvcHlGaWxlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTczMCw2
ICs3MzMsNyBAQAogCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0OUQwMSAvKiBNb2R1bGVNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2R1bGVNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1NzVBMkUxMTI0MkY4QUYwMENCN0YyQyAvKiBX
ZWJLaXQuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBXZWJLaXQuZnJhbWV3b3JrOyBwYXRo
ID0gL0J1aWxkL0RlYnVnL1dlYktpdC5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRl
PiI7IH07CiAJCUQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUG9wdXBNZW51LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdl
YlBvcHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1l
bnUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMy
QjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzU1LDYgKzc1OSw3IEBACiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlD
NTc1QTQ4QzEyNDJGOTVDMDBDQjdGMkMgLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAogCQkJCTFBQURFNkZGMTBEODU1RkMwMEQzRDYzRCAvKiBBcHBsaWNhdGlvblNlcnZpY2Vz
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAogCQkJCTFBQTFDRDA3MTAwRkExQkEwMDc4REVC
QyAvKiBDYXJib24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCiAJCQkJOERDMkVGNTcwNDg2
QTY5NDAwOThCMjE2IC8qIENvY29hLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLApAQCAtODI2
LDYgKzgzMSw3IEBACiAJCQkJQkM4N0RGQTkxMDE4MTAxNDAwNTY0MjE2IC8qIGxpYmljdWNvcmUu
ZHlsaWIgKi8sCiAJCQkJMUFBMUNDNUMxMDBGQTFBMTAwNzhERUJDIC8qIFF1YXJ0ekNvcmUuZnJh
bWV3b3JrICovLAogCQkJCTFBQTFDNzlBMTAwRTdGQzUwMDc4REVCQyAvKiBXZWJDb3JlLmZyYW1l
d29yayAqLywKKwkJCQlDNTc1QTJFMTEyNDJGOEFGMDBDQjdGMkMgLyogV2ViS2l0LmZyYW1ld29y
ayAqLywKIAkJCSk7CiAJCQluYW1lID0gIkxpbmtlZCBGcmFtZXdvcmtzIjsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CkBAIC0xOTQ3LDYgKzE5NTMsMTAgQEAKIAkJCWlzYSA9IFhDQnVpbGRD
b25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQ0I4NkY0QjEx
NkFBQUNEMDBDRTIwQjcgLyogV2ViS2l0Mi54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3Mg
PSB7CisJCQkJRlJBTUVXT1JLX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIs
CisJCQkJCS9CdWlsZC9EZWJ1ZywKKwkJCQkpOwogCQkJCUlOU1RBTExfUEFUSCA9ICIkKEJVSUxU
X1BST0RVQ1RTX0RJUikiOwogCQkJCU9USEVSX0xERkxBR1MgPSAoCiAJCQkJCSIkKE9USEVSX0xE
RkxBR1MpIiwKQEAgLTE5NTksNiArMTk2OSwxMCBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDQjg2RjRCMTE2QUFBQ0Qw
MENFMjBCNyAvKiBXZWJLaXQyLnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJ
L0J1aWxkL0RlYnVnLAorCQkJCSk7CiAJCQkJSU5TVEFMTF9QQVRIID0gIiQoQlVJTFRfUFJPRFVD
VFNfRElSKSI7CiAJCQkJT1RIRVJfTERGTEFHUyA9ICgKIAkJCQkJIiQoT1RIRVJfTERGTEFHUyki
LApAQCAtMjAwMSw2ICsyMDE1LDEwIEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsK
IAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkNCODZGNEIxMTZBQUFDRDAwQ0UyMEI3
IC8qIFdlYktpdDIueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUZSQU1F
V09SS19TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkvQnVpbGQv
RGVidWcsCisJCQkJKTsKIAkJCQlPVEhFUl9MREZMQUdTID0gKAogCQkJCQkiJChPVEhFUl9MREZM
QUdTKSIsCiAJCQkJCSItbFdlYktpdFN5c3RlbUludGVyZmFjZSIsCkluZGV4OiBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAko
cmV2aXNpb24gNjc2NzYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDE3ICszMDksMTQgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnRleHRXaWxsQmVEZWxldGVkSQogCiAKICNpZiBQTEFURk9STShN
QUMpCi1OU1N0cmluZyogV2ViRWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCop
CitOU1N0cmluZyogV2ViRWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCogdXJs
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4g
bV9wYWdlLT51c2VyVmlzaWJsZVN0cmluZyh1cmwpOwogfQogCi1Eb2N1bWVudEZyYWdtZW50KiBX
ZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0
dHJpYnV0ZWRTdHJpbmcqLCBWZWN0b3I8QXJjaGl2ZVJlc291cmNlKj4mKQorRG9jdW1lbnRGcmFn
bWVudCogV2ViRWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJp
bmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiBzdHJpbmcsIFZlY3RvcjxBcmNoaXZlUmVzb3VyY2UqPiYg
cmVzb3VyY2UpCiB7Ci0gICAgLy8gRklYTUU6IGFkZCBjb2RlIGhlcmUgdG8gY3JlYXRlIGZha2Ug
V2ViVmlldyBhbmQgbG9hZCBXZWJLaXQgMQotICAgIC8vIFRoaXMgaXMgbmVlZGVkIHRvIHN1cHBv
cnQgUlRGIGFuZCBSVEZEIGluIHRoZSBwYXN0ZWJvYXJkCi0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIG1fcGFnZS0+ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKHN0cmluZywg
cmVzb3VyY2UpOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5zZXJ0aW9uUGFzdGVi
b2FyZChOU1Bhc3RlYm9hcmQqKQpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aAkocmV2aXNpb24gNjc2NzYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDE4IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybVRvdWNoRXZlbnQuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorI2lmZGVm
IF9fT0JKQ19fCitAY2xhc3MgTlNBdHRyaWJ1dGVkU3RyaW5nOworQGNsYXNzIE5TU3RyaW5nOwor
QGNsYXNzIE5TVVJMOworI2Vsc2UKK2NsYXNzIE5TQXR0cmlidXRlZFN0cmluZzsKK2NsYXNzIE5T
U3RyaW5nOworY2xhc3MgTlNVUkw7CisjZW5kaWYKKyNlbmRpZgorCiBuYW1lc3BhY2UgQ29yZUlQ
QyB7CiAgICAgY2xhc3MgQXJndW1lbnREZWNvZGVyOwogICAgIGNsYXNzIENvbm5lY3Rpb247CkBA
IC01Miw2ICs2NCw3IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIGNsYXNzIEFyY2hpdmVSZXNvdXJjZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiAgICAgY2xhc3MgS2V5Ym9hcmRFdmVudDsKICAgICBjbGFzcyBQYWdlOwpAQCAtMTM5LDYg
KzE1MiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01v
ZGUoKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIE5TU3RyaW5nKiB1c2VyVmlz
aWJsZVN0cmluZyhOU1VSTCopOworICAgIFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQqIGRvY3Vt
ZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcqLCBWZWN0
b3I8V2ViQ29yZTo6QXJjaGl2ZVJlc291cmNlKj4mKTsKKyNlbmRpZgorICAgIAogICAgIHN0YXRp
YyBjb25zdCBXZWJFdmVudCogY3VycmVudEV2ZW50KCk7CiAKIHByaXZhdGU6CkluZGV4OiBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkocmV2aXNpb24gNjc2
NzYpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDI3IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogCiAj
aW5jbHVkZSAiV2ViRXZlbnQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FyY2hpdmVSZXNvdXJjZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRGcmFnbWVudC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvRE9NRG9jdW1lbnRGcmFnbWVudEludGVybmFsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb2N1
c0NvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dp
bmRvd3NLZXlib2FyZENvZGVzLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dlYlJlc291cmNlLmg+Cisj
aW5jbHVkZSA8V2ViS2l0L1dlYlZpZXcuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViVmlld1ByaXZh
dGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViTlNVUkxFeHRyYXMuaD4KKworQGludGVyZmFjZSBO
U0F0dHJpYnV0ZWRTdHJpbmcgKFdlYk5TQXR0cmlidXRlZFN0cmluZ0RldGFpbHMpCistIChET01E
b2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3Vt
ZW50OihET01Eb2N1bWVudCAqKWRvY3VtZW50IGRvY3VtZW50QXR0cmlidXRlczooTlNEaWN0aW9u
YXJ5ICopZGljdCBzdWJyZXNvdXJjZXM6KE5TQXJyYXkgKiopc3VicmVzb3VyY2VzOworQGVuZAor
CitAaW50ZXJmYWNlIFdlYlJlc291cmNlIChXZWJSZXNvdXJjZUludGVybmFsKQorLSAoV2ViQ29y
ZTo6QXJjaGl2ZVJlc291cmNlKilfY29yZVJlc291cmNlOworQGVuZAogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApAQCAtMjczLDQgKzI4OCw1MyBAQCBib29sIFdlYlBhZ2U6OnBlcmZvcm1E
ZWZhdWx0QmVoYXZpb3JGb3JLCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBOU0FycmF5
KiBleGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKQoreworICAg
IHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9IG5pbDsKKyAgICBpZiAoZWxlbWVudHMgPT0gbmls
KSB7CisgICAgICAgIGVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6
CisgICAgICAgICAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2FudCBzdHlsZSB0
byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0ZWQuCisgICAg
ICAgICAgICAgICAgICAgIEAic3R5bGUiLAorICAgICAgICAgICAgICAgICAgICAvLyBPbWl0IHht
bCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KKyAgICAgICAgICAgICAgICAgICAgQCJ4bWwi
LCAKKyAgICAgICAgICAgICAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBnZXQgc3RyaXBw
ZWQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCisgICAgICAgICAgICAgICAg
ICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCisgICAgICAgICAgICAg
ICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgorICAgICAgICAgICAgICAgICAgICBAImFw
cGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJmb250IiwgQCJpc2luZGV4
IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAorICAgICAgICAgICAgICAgICAgICAv
LyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9mIHRoZSBmcmFn
bWVudC4KKyAgICAgICAgICAgICAgICAgICAgQCJvYmplY3QiLCBuaWxdOworICAgICAgICBDRlJl
dGFpbihlbGVtZW50cyk7CisgICAgfQorICAgIHJldHVybiBlbGVtZW50czsKK30KKworRG9jdW1l
bnRGcmFnbWVudCogV2ViUGFnZTo6ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5n
KE5TQXR0cmlidXRlZFN0cmluZyogc3RyaW5nLCBWZWN0b3I8QXJjaGl2ZVJlc291cmNlKj4mIHJl
c291cmNlcykKK3sKKyAgICBXZWJWaWV3KiB2aWV3ID0gW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgMCwgMCldOworICAgIAorICAgIE5TRGljdGlvbmFyeSAq
ZGljdGlvbmFyeSA9IFtbTlNEaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aE9iamVjdHNBbmRLZXlz
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlZEVsZW1lbnRzRm9yQXR0
cmlidXRlZFN0cmluZ0NvbnZlcnNpb24oKSwgTlNFeGNsdWRlZEVsZW1lbnRzRG9jdW1lbnRBdHRy
aWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCwgQCJXZWJSZXNvdXJj
ZUhhbmRsZXIiLCBuaWxdOworICAgIAorICAgIE5TQXJyYXkqIHM7CisgICAgRE9NRG9jdW1lbnRG
cmFnbWVudCogZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5nZTpOU01ha2VSYW5n
ZSgwLCBbc3RyaW5nIGxlbmd0aF0pIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6W1t2aWV3IG1haW5GcmFtZV0gRE9NRG9jdW1l
bnRdIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVu
dEF0dHJpYnV0ZXM6ZGljdGlvbmFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWJyZXNvdXJjZXM6JnNdOworICAgIE5TRW51bWVyYXRvciAqZSA9
IFtzIG9iamVjdEVudW1lcmF0b3JdOworICAgIFdlYlJlc291cmNlICpyOworICAgIHdoaWxlICgo
ciA9IFtlIG5leHRPYmplY3RdKSkgeworICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiAg
YXIgPSBbciBfY29yZVJlc291cmNlXTsKKyAgICAgICAgcmVzb3VyY2VzLmFwcGVuZChhci5nZXQo
KSk7CisgICAgfQorICAgIFtkaWN0aW9uYXJ5IHJlbGVhc2VdOworICAgIFt2aWV3IHJlbGVhc2Vd
OworICAgIHJldHVybiBjb3JlKGZyYWdtZW50KTsKK30KKworTlNTdHJpbmcqIFdlYlBhZ2U6OnVz
ZXJWaXNpYmxlU3RyaW5nKE5TVVJMKiBVUkwpCit7CisgICAgcmV0dXJuIFtVUkwgX3dlYl91c2Vy
VmlzaWJsZVN0cmluZ107Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="57302"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67975</attachid>
            <date>2010-09-17 17:09:28 -0700</date>
            <delta_ts>2010-09-18 16:58:49 -0700</delta_ts>
            <desc>Patch3</desc>
            <filename>more-paste.txt</filename>
            <type>text/plain</type>
            <size>29659</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Nzc1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDktMTcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQ
YXN0ZWJvYXJkIGRvZXNuJ3Qgd29yayBpbiBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
Lzc2NjA1Mzc+CisKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgIChX
ZWJDb3JlOjpFbXB0eUVkaXRvckNsaWVudDo6ZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVk
U3RyaW5nKTogQ2hhbmdlZCBwYXJhbWV0ZXIgdG8KKyAgICAgICAgYmUgYSBWZWN0b3Igb2YgUmVm
UHRyLgorICAgICAgICAqIHBhZ2UvRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1
bWVudEZyYWdtZW50V2l0aFJ0Zik6IFN0eWxpc3RpYyBjaGFuZ2VzLgorCiAyMDEwLTA5LTE3ICBN
YXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDY3NzI4
KQorKysgV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQz
NSw3ICs0MzUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1hcmtlZFRleHRBYmFuZG9u
ZWQoRnJhbWUqKSB7IH0KIAogICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5n
KE5TVVJMKikgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgRG9jdW1lbnRGcmFnbWVudCogZG9j
dW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyosIFZl
Y3RvcjxBcmNoaXZlUmVzb3VyY2UqPiYpIHsgcmV0dXJuIDA7IH07CisgICAgdmlydHVhbCBEb2N1
bWVudEZyYWdtZW50KiBkb2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRy
aWJ1dGVkU3RyaW5nKiwgVmVjdG9yPCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+JikgeyByZXR1
cm4gMDsgfTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zZXJ0aW9uUGFzdGVib2FyZChOU1Bhc3Rl
Ym9hcmQqKSB7IH07CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICB2aXJ0dWFsIE5TQXJy
YXkqIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihGcmFtZSopIHsgcmV0dXJuIDA7IH0KSW5k
ZXg6IFdlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY3NzI4KQorKysgV2ViQ29yZS9wYWdlL0VkaXRv
ckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDcgQEAgcHVibGljOgogCiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5n
KE5TVVJMKikgPSAwOwotICAgIHZpcnR1YWwgRG9jdW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcmFn
bWVudEZyb21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyosIFZlY3RvcjxBcmNo
aXZlUmVzb3VyY2UqPiYpID0gMDsKKyAgICB2aXJ0dWFsIERvY3VtZW50RnJhZ21lbnQqIGRvY3Vt
ZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcqLCBWZWN0
b3I8IFJlZlB0cjxBcmNoaXZlUmVzb3VyY2U+ID4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEluc2VydGlvblBhc3RlYm9hcmQoTlNQYXN0ZWJvYXJkKikgPSAwOwogI2lmZGVmIEJVSUxESU5H
X09OX1RJR0VSCiAgICAgdmlydHVhbCBOU0FycmF5KiBwYXN0ZWJvYXJkVHlwZXNGb3JTZWxlY3Rp
b24oRnJhbWUqKSA9IDA7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0J
KHJldmlzaW9uIDY3NzI4KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDA3LDcgKzQwNyw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBpZiAoIXdhc0RlZmVycmluZ0NhbGxiYWNrcykKICAg
ICAgICAgZnJhbWUtPnBhZ2UoKS0+c2V0RGVmZXJzTG9hZGluZyh0cnVlKTsKIAotICAgIFZlY3Rv
cjxBcmNoaXZlUmVzb3VyY2UqPiByZXNvdXJjZXM7CisgICAgVmVjdG9yPCBSZWZQdHI8QXJjaGl2
ZVJlc291cmNlPiA+IHJlc291cmNlczsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBmcmFtZS0+ZWRpdG9yKCktPmNsaWVudCgpLT5kb2N1bWVudEZyYWdtZW50RnJvbUF0
dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLCByZXNvdXJjZXMpOwogCiAgICAgc2l6ZV90IHNpemUgPSBy
ZXNvdXJjZXMuc2l6ZSgpOwpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3NzU4KQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wOS0xNyAgRW5yaWNhIENhc3Vj
Y2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFBhc3RlYm9hcmQgZG9lc24ndCB3b3JrIGluIFdlYktpdDIuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjMxNworICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNzY2MDUzNz4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3Ig
UlRGLCBSVEZEIGFuZCBOU1VybCBmb3JtYXRzIG9uIHRoZSBNYWMuCisgICAgICAgIFN0aWxsIG1p
c3NpbmcgdGhlIHNlbGVjdGl2ZSBlbmFibGluZyBvZiB0aGUgbWVudSBlbnRyaWVzLgorCisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBXZWJFZGl0b3JD
bGllbnRNYWMubW0uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuY3BwOiBSZW1vdmVkIE1hYyBvbmx5IG1ldGhvZHMKKyAgICAgICAgdGhhdCBhcmUg
bm93IGluIFdlYkVkaXRvckNsaWVudE1hYy5tbQorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6IEZpeGVkIHN0eWxlIGFuZCBjaGFuZ2VkIHBhcmFt
ZXRlcgorICAgICAgICB0eXBlIGluIGRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmlu
ZyB0byBiZSBhIFZlY3RvciBvZiBSZWZQdHIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tOiBBZGRlZC4KKyAgICAgICAgQWxsIHRo
ZSBmb2xsb3dpbmcgbWV0aG9kcyBoYXZlIGJlZW4gbW92ZWQgZnJvbSBXZWJFZGl0b3JDbGllbnQu
Y3BwLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnVzZXJWaXNpYmxlU3RyaW5n
KTogQWRkZWQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZUV4Y2x1ZGVk
RWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbik6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0
cmluZyk6IEFkZGVkIGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OnNldEluc2VydGlvblBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0
b3JDbGllbnQ6OnBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6
OldlYkVkaXRvckNsaWVudDo6dXBwZXJjYXNlV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6bG93ZXJjYXNlV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNs
aWVudDo6Y2FwaXRhbGl6ZVdvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6
OnNob3dTdWJzdGl0dXRpb25zUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6dG9nZ2xlU21hcnRJbnNlcnREZWxldGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0
aXR1dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNM
aW5rRGV0ZWN0aW9uRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6
dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRv
ckNsaWVudDo6aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnRFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVB
dXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6c2hvd0NvcnJlY3Rpb25QYW5lbCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5l
bCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aXNTaG93aW5nQ29ycmVjdGlv
blBhbmVsKToKKworMjAxMC0wOS0xNyAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3Rl
Ym9hcmQgZG9lc24ndCB3b3JrIGluIFdlYktpdDIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjMxNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzY2
MDUzNz4KKworICAgICAgICBBZGRpbmcgc3VwcG9ydCBmb3IgUlRGLCBSVEZEIGFuZCBOU1VybCBm
b3JtYXRzIG9uIHRoZSBNYWMuCisgICAgICAgIFN0aWxsIG1pc3NpbmcgdGhlIHNlbGVjdGl2ZSBl
bmFibGluZyBvZiB0aGUgbWVudSBlbnRyaWVzLgorICAgICAgICAKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkVkaXRvckNsaWVudDo6dXNlclZpc2libGVTdHJpbmcpOiBBZGRlZCBjYWxsIHRvIHBsYXRm
b3JtCisgICAgICAgIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViS2l0OjpX
ZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyk6IEFk
ZGVkIGNhbGwgdG8gcGxhdGZvcm0KKyAgICAgICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmV4Y2x1ZGVk
RWxlbWVudHNGb3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbik6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpkb2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXNlclZpc2libGVTdHJpbmcpOiBBZGRl
ZC4KKwogMjAxMC0wOS0xNyAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFuZXlAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0
Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NzcyOCkKKysrIFdlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYs
NiArMzQ2LDcgQEAKIAkJQzBFM0FBN0ExMjA5RTgzMDAwQTQ5RDAxIC8qIE1vZHVsZU1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwRTNBQTQ4MTIw
OUU0NTAwMEE0OUQwMSAvKiBNb2R1bGVNYWMubW0gKi87IH07CiAJCUMwRTNBQTdCMTIwOUU4MzUw
MEE0OUQwMSAvKiBNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzBFM0FBNDUxMjA5RTJCQTAwQTQ5RDAxIC8qIE1vZHVsZS5jcHAgKi87IH07
CiAJCUMwRTNBQTdDMTIwOUU4M0MwMEE0OUQwMSAvKiBNb2R1bGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMwRTNBQTQ0MTIwOUUyQkEwMEE0OUQwMSAv
KiBNb2R1bGUuaCAqLzsgfTsKKwkJQzUyMzdGNjAxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRv
ckNsaWVudE1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi87
IH07CiAJCUQzQjk0ODQ2MTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNCOTQ4NDIxMUZGNEI2
NTAwMDMyQjM5IC8qIFdlYlBvcHVwTWVudS5jcHAgKi87IH07CiAJCUQzQjk0ODQ3MTFGRjRCNjUw
MDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQzQjk0ODQzMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUu
aCAqLzsgfTsKIAkJRDNCOTQ4NDgxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlNlYXJjaFBvcHVwTWVu
dS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0I5
NDg0NDExRkY0QjY1MDAwMzJCMzkgLyogV2ViU2VhcmNoUG9wdXBNZW51LmNwcCAqLzsgfTsKQEAg
LTczMCw2ICs3MzEsNyBAQAogCQlDMEUzQUE0NDEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vZHVsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMEUzQUE0NTEyMDlFMkJBMDBBNDlEMDEgLyogTW9kdWxlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vZHVsZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMwRTNBQTQ4MTIwOUU0NTAwMEE0OUQwMSAvKiBNb2R1bGVN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2R1bGVNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM1MjM3RjVGMTI0NDFDQTMwMDc4MDQ3
MiAvKiBXZWJFZGl0b3JDbGllbnRNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJFZGl0b3JDbGllbnRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQzQjk0ODQyMTFGRjRCNjUwMDAzMkIzOSAvKiBXZWJQb3B1cE1lbnUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUG9wdXBNZW51LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDMxMUZGNEI2NTAwMDMyQjM5IC8qIFdlYlBv
cHVwTWVudS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQb3B1cE1lbnUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNCOTQ4NDQxMUZGNEI2NTAwMDMyQjM5
IC8qIFdlYlNlYXJjaFBvcHVwTWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXZWJTZWFyY2hQb3B1cE1lbnUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTIxNyw2ICsxMjE5LDcgQEAKIAkJQkMxMTFBREUxMTJGNUI5QTAwMzM3QkFCIC8qIG1h
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQzUyMzdG
NUYxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSAqLywKIAkJCQlCQzEx
MUFERjExMkY1QkMyMDAzMzdCQUIgLyogV2ViRXJyb3JzTWFjLm1tICovLAogCQkJCTkzOTFGMjgz
MTIxQjM4RjUwMEVCRjdFOCAvKiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggKi8sCiAJCQkJ
OTM5MUYyODQxMjFCMzhGNTAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0g
Ki8sCkBAIC0xODgwLDYgKzE4ODMsNyBAQAogCQkJCUJDMzNERThGMTIzODVDMzMwMDM2MEYzRiAv
KiBXS051bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0Y1MDEyMjEyM0VEM0IzMDA1OTU1
QUUgLyogVGhyZWFkTGF1bmNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGNTAxQjQxMjNF
RjYwMjAwNTk1NUFFIC8qIFRocmVhZExhdW5jaGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
QzUyMzdGNjAxMjQ0MUNBMzAwNzgwNDcyIC8qIFdlYkVkaXRvckNsaWVudE1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHJldmlzaW9uIDY3NzI4KQorKysgV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwNywxMjUgKzMwNyw2IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0ZXh0V2lsbEJlRGVs
ZXRlZEkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi0KLSNpZiBQTEFURk9STShNQUMpCi1O
U1N0cmluZyogV2ViRWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCopCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbmlsOwotfQotCi1Eb2N1bWVudEZyYWdt
ZW50KiBXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmlu
ZyhOU0F0dHJpYnV0ZWRTdHJpbmcqLCBWZWN0b3I8QXJjaGl2ZVJlc291cmNlKj4mKQotewotICAg
IC8vIEZJWE1FOiBhZGQgY29kZSBoZXJlIHRvIGNyZWF0ZSBmYWtlIFdlYlZpZXcgYW5kIGxvYWQg
V2ViS2l0IDEKLSAgICAvLyBUaGlzIGlzIG5lZWRlZCB0byBzdXBwb3J0IFJURiBhbmQgUlRGRCBp
biB0aGUgcGFzdGVib2FyZAotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkVkaXRvckNsaWVu
dDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQqKQotewotICAgIC8vIFRoaXMg
aXMgdXNlZCBvbmx5IGJ5IE1haWwsIG5vIG5lZWQgdG8gaW1wbGVtZW50IGl0IG5vdy4KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi0jaWZkZWYgQlVJTERJTkdfT05fVElHRVIKLU5TQXJyYXkq
IFdlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBuaWw7Ci19Ci0jZW5kaWYKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cHBl
cmNhc2VXb3JkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6bG93ZXJjYXNlV29yZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNhcGl0YWxpemVXb3JkKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd1N1YnN0aXR1dGlvbnNQYW5l
bChib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzdWJzdGl0dXRpb25zUGFuZWxJc1Nob3dpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xl
U21hcnRJbnNlcnREZWxldGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wg
V2ViRWRpdG9yQ2xpZW50Ojppc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbigpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljTGlu
a0RldGVjdGlvbigpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkVkaXRvckNs
aWVudDo6dG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbigpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21hdGljVGV4dFJlcGxh
Y2VtZW50RW5hYmxlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFj
ZW1lbnQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgV2ViRWRpdG9yQ2xp
ZW50Ojppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkVkaXRvckNsaWVu
dDo6dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi0jZW5kaWYKLQogdm9pZCBXZWJFZGl0b3JDbGllbnQ6Omlnbm9yZVdvcmRJ
blNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpA
QCAtNDUyLDEzICszMzMsNiBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZT
dHJpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBH
cmFtbWFyRGV0YWlsJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNDk1LDIyICszNjks
NCBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5wdXRNZXRob2RTdGF0CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdf
T05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX1NOT1dfTEVPUEFSRCkKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93Q29ycmVj
dGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgYm91bmRpbmdCb3hPZlJlcGxhY2Vk
U3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFjZWRTdHJpbmcsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6RWRpdG9yKikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdlYkVkaXRvckNsaWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25Q
YW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1ib29sIFdlYkVkaXRvckNsaWVudDo6aXNTaG93aW5nQ29ycmVjdGlvblBhbmVsKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJFZGl0b3JDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDY3NzI4KQorKysgV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05MSwxMSArOTEsMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgdGV4
dERpZENoYW5nZUluVGV4dEFyZWEoV2ViQ29yZTo6RWxlbWVudCopOwogCiAjaWYgUExBVEZPUk0o
TUFDKQotICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMKik7Ci0g
ICAgdmlydHVhbCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBkb2N1bWVudEZyYWdtZW50RnJv
bUF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nKiwgVmVjdG9yPFdlYkNvcmU6OkFy
Y2hpdmVSZXNvdXJjZSo+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluc2VydGlvblBhc3RlYm9h
cmQoTlNQYXN0ZWJvYXJkKik7CisgICAgdmlydHVhbCBOU1N0cmluZyAqdXNlclZpc2libGVTdHJp
bmcoTlNVUkwgKik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEb2N1bWVudEZyYWdtZW50KiBkb2N1
bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIFZl
Y3RvcjwgUmVmUHRyPFdlYkNvcmU6OkFyY2hpdmVSZXNvdXJjZT4gPiYpOworICAgIHZpcnR1YWwg
dm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVib2FyZCAqKTsKICNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgotICAgIHZpcnR1YWwgTlNBcnJheSogcGFzdGVib2FyZFR5cGVzRm9yU2Vs
ZWN0aW9uKFdlYkNvcmU6OkZyYW1lKik7CisgICAgdmlydHVhbCBOU0FycmF5ICpwYXN0ZWJvYXJk
VHlwZXNGb3JTZWxlY3Rpb24oV2ViQ29yZTo6RnJhbWUqKTsKICNlbmRpZgogI2VuZGlmCiAKSW5k
ZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgIldl
YkVkaXRvckNsaWVudC5oIgorCisjZGVmaW5lIERJU0FCTEVfTk9UX0lNUExFTUVOVEVEX1dBUk5J
TkdTIDEKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSAiV2ViUGFnZS5o
IgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BcmNoaXZlUmVzb3Vy
Y2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0RPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
RE9NRG9jdW1lbnRJbnRlcm5hbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNs
dWRlIDxXZWJLaXQvV2ViUmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV2ViTlNVUkxFeHRy
YXMuaD4KKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJ
TkdfT05fTEVPUEFSRCkgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fU05PV19MRU9QQVJEKQorI2lt
cG9ydCA8QXBwS2l0L05TVGV4dENoZWNrZXIuaD4KKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK0BpbnRlcmZhY2UgTlNBdHRyaWJ1dGVk
U3RyaW5nIChXZWJOU0F0dHJpYnV0ZWRTdHJpbmdEZXRhaWxzKQorLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCopX2RvY3VtZW50RnJvbVJhbmdlOihOU1JhbmdlKXJhbmdlIGRvY3VtZW50OihET01Eb2N1
bWVudCopZG9jdW1lbnQgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKilkaWN0IHN1
YnJlc291cmNlczooTlNBcnJheSAqKilzdWJyZXNvdXJjZXM7CitAZW5kCisKK0BpbnRlcmZhY2Ug
V2ViUmVzb3VyY2UgKFdlYlJlc291cmNlSW50ZXJuYWwpCistIChXZWJDb3JlOjpBcmNoaXZlUmVz
b3VyY2UqKV9jb3JlUmVzb3VyY2U7CitAZW5kCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitOU1N0
cmluZyAqV2ViRWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqdXJsKQorewor
ICAgIHJldHVybiBbdXJsIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworfQorCitzdGF0aWMgTlNB
cnJheSAqY3JlYXRlRXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9u
KCkKK3sKKyAgICBOU0FycmF5ICplbGVtZW50cyA9IFtbTlNBcnJheSBhbGxvY10gaW5pdFdpdGhP
YmplY3RzOiAKKyAgICAgICAgLy8gT21pdCBzdHlsZSBzaW5jZSB3ZSB3YW50IHN0eWxlIHRvIGJl
IGlubGluZSBzbyB0aGUgZnJhZ21lbnQgY2FuIGJlIGVhc2lseSBpbnNlcnRlZC4KKyAgICAgICAg
QCJzdHlsZSIsIAorICAgICAgICAvLyBPbWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRN
TC4KKyAgICAgICAgQCJ4bWwiLCAKKyAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBnZXQg
c3RyaXBwZWQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCisgICAgICAgIEAi
ZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsIAorICAgICAgICAvLyBPbWl0IGRl
cHJlY2F0ZWQgdGFncy4KKyAgICAgICAgQCJhcHBsZXQiLCBAImJhc2Vmb250IiwgQCJjZW50ZXIi
LCBAImRpciIsIEAiZm9udCIsIEAiaXNpbmRleCIsIEAibWVudSIsIEAicyIsIEAic3RyaWtlIiwg
QCJ1IiwgCisgICAgICAgIC8vIE9taXQgb2JqZWN0IHNvIG5vIGZpbGUgYXR0YWNobWVudHMgYXJl
IHBhcnQgb2YgdGhlIGZyYWdtZW50LgorICAgICAgICBAIm9iamVjdCIsIG5pbF07CisgICAgQ0ZS
ZXRhaW4oZWxlbWVudHMpOworICAgIHJldHVybiBlbGVtZW50czsKK30KKworRG9jdW1lbnRGcmFn
bWVudCogV2ViRWRpdG9yQ2xpZW50Ojpkb2N1bWVudEZyYWdtZW50RnJvbUF0dHJpYnV0ZWRTdHJp
bmcoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIFZlY3RvcjwgUmVmUHRyPEFyY2hpdmVSZXNv
dXJjZT4gPiYgcmVzb3VyY2VzKQoreworICAgIHN0YXRpYyBOU0FycmF5ICpleGNsdWRlZEVsZW1l
bnRzID0gY3JlYXRlRXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9u
KCk7CisgICAgCisgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkg
YWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6IGV4Y2x1ZGVkRWxlbWVudHMsCisgICAgICAg
IE5TRXhjbHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlLCBuaWwsIEAiV2ViUmVzb3VyY2VI
YW5kbGVyIiwgbmlsXTsKKyAgICAKKyAgICBOU0FycmF5ICpzdWJSZXNvdXJjZXM7CisgICAgRE9N
RG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5nZTpO
U01ha2VSYW5nZSgwLCBbc3RyaW5nIGxlbmd0aF0pCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDpraXQobV9wYWdlLT5tYWluRnJh
bWUoKS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvY3VtZW50QXR0cmlidXRlczpkaWN0aW9uYXJ5CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJlc291cmNlczom
c3ViUmVzb3VyY2VzXTsKKyAgICBmb3IgKFdlYlJlc291cmNlKiByZXNvdXJjZSBpbiBzdWJSZXNv
dXJjZXMpCisgICAgICAgIHJlc291cmNlcy5hcHBlbmQoW3Jlc291cmNlIF9jb3JlUmVzb3VyY2Vd
KTsKKyAgICAKKyAgICBbZGljdGlvbmFyeSByZWxlYXNlXTsKKyAgICByZXR1cm4gY29yZShmcmFn
bWVudCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZXRJbnNlcnRpb25QYXN0ZWJvYXJk
KE5TUGFzdGVib2FyZCAqKQoreworICAgIC8vIFRoaXMgaXMgdXNlZCBvbmx5IGJ5IE1haWwsIG5v
IG5lZWQgdG8gaW1wbGVtZW50IGl0IG5vdy4KKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCisj
aWZkZWYgQlVJTERJTkdfT05fVElHRVIKK05TQXJyYXkgKldlYkVkaXRvckNsaWVudDo6cGFzdGVi
b2FyZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBuaWw7Cit9CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJ
R0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnVwcGVyY2FzZVdvcmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojpsb3dlcmNhc2VXb3JkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2FwaXRhbGl6ZVdvcmQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzaG93U3Vic3RpdHV0
aW9uc1BhbmVsKGJvb2wpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OnN1YnN0aXR1dGlvbnNQYW5lbElzU2hvd2luZygpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0b2dnbGVTbWFydEluc2VydERlbGV0ZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFi
bGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYkVkaXRvckNsaWVudDo6aXNB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29s
IFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1Rl
eHRSZXBsYWNlbWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViRWRp
dG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBh
cmFncmFwaChjb25zdCBVQ2hhciAqLCBpbnQgbGVuZ3RoLCB1aW50NjRfdCwgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKyNlbmRpZgor
CisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09O
X0xFT1BBUkQpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1NOT1dfTEVPUEFSRCkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpzaG93Q29ycmVjdGlvblBhbmVsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgYm91bmRpbmdCb3hPZlJlcGxhY2VkU3RyaW5nLCBjb25zdCBXVEY6OlN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiByZXBsYWNlbWVudFN0cmluZywgV2ViQ29yZTo6
RWRpdG9yKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6ZGlzbWlzc0NvcnJlY3Rpb25QYW5lbChib29sIGNvcnJlY3Rpb25BY2NlcHRlZCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFdlYkVkaXRvckNsaWVudDo6aXNTaG93
aW5nQ29ycmVjdGlvblBhbmVsKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2Nzc1OCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTAtMDktMTcgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXN0
ZWJvYXJkIGRvZXNuJ3Qgd29yayBpbiBXZWJLaXQyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIzMTcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc2
NjA1Mzc+CisKKyAgICAgICAgU29tZSBjaGFuZ2VzIHRvIGZpeCBzdHlsZSBpbmNvbnNpc3RlbmNp
ZXMuCisgICAgICAgIEFkZGVkIE9CSkMgMi4wIHN0eWxlIGVudW1lcmF0aW9uLgorICAgICAgICAK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAgICAgIChXZWJFZGl0b3JDbGll
bnQ6OnVzZXJWaXNpYmxlU3RyaW5nKToKKyAgICAgICAgKGNyZWF0ZUV4Y2x1ZGVkRWxlbWVudHNG
b3JBdHRyaWJ1dGVkU3RyaW5nQ29udmVyc2lvbik6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyk6IENoYW5nZWQgcGFyYW1ldGVy
IHRvIGJlCisgICAgICAgIGEgVmVjdG9yIG9mIFJlZlB0ci4KKyAgICAgICAgKFdlYkVkaXRvckNs
aWVudDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6
OnBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbik6CisKIDIwMTAtMDktMTcgIE1hdHRoZXcgRGVs
YW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBG
cmFzZXIuCkluZGV4OiBXZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
LmgJKHJldmlzaW9uIDY3NzI4KQorKysgV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkU2V0U2VsZWN0aW9uVHlwZXNGb3JQYXN0ZWJvYXJkKCk7CiAKLSAgICB2aXJ0
dWFsIE5TU3RyaW5nKiB1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCopOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RG9jdW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcmFnbWVudEZyb21BdHRyaWJ1dGVkU3Ry
aW5nKE5TQXR0cmlidXRlZFN0cmluZyosIFZlY3RvcjxXZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2Uq
PiYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbnNlcnRpb25QYXN0ZWJvYXJkKE5TUGFzdGVib2Fy
ZCopOworICAgIHZpcnR1YWwgTlNTdHJpbmcqIHVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMICopOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudCogZG9jdW1lbnRGcmFnbWVudEZy
b21BdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBWZWN0b3I8IFJlZlB0cjxX
ZWJDb3JlOjpBcmNoaXZlUmVzb3VyY2U+ID4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5zZXJ0
aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQgKik7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIK
LSAgICB2aXJ0dWFsIE5TQXJyYXkqIHBhc3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihXZWJDb3Jl
OjpGcmFtZSopOworICAgIHZpcnR1YWwgTlNBcnJheSAqcGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0
aW9uKFdlYkNvcmU6OkZyYW1lKik7CiAjZW5kaWYKICAgICAKICNpZiAhZGVmaW5lZChCVUlMRElO
R19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKSW5kZXg6IFdlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiA2Nzcy
OCkKKysrIFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OCw4ICs3OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCiBAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoV2Vi
TlNBdHRyaWJ1dGVkU3RyaW5nRGV0YWlscykKLS0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01S
YW5nZSAqKXJhbmdlOwotLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyb21SYW5n
ZTooTlNSYW5nZSlyYW5nZSBkb2N1bWVudDooRE9NRG9jdW1lbnQgKilkb2N1bWVudCBkb2N1bWVu
dEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoq
KXN1YnJlc291cmNlczsKKy0gKGlkKV9pbml0V2l0aERPTVJhbmdlOihET01SYW5nZSopcmFuZ2U7
CistIChET01Eb2N1bWVudEZyYWdtZW50KilfZG9jdW1lbnRGcm9tUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2UgZG9jdW1lbnQ6KERPTURvY3VtZW50Kilkb2N1bWVudCBkb2N1bWVudEF0dHJpYnV0ZXM6KE5T
RGljdGlvbmFyeSAqKWRpY3Qgc3VicmVzb3VyY2VzOihOU0FycmF5ICoqKXN1YnJlc291cmNlczsK
IEBlbmQKIAogc3RhdGljIFdlYlZpZXdJbnNlcnRBY3Rpb24ga2l0KEVkaXRvckluc2VydEFjdGlv
biBjb3JlQWN0aW9uKQpAQCAtMzM2LDU5ICszMzYsNTQgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmRpZFNldFNlbGVjdGlvblR5cAogICAgIFtbbV93ZWJWaWV3IF9lZGl0aW5nRGVsZWdhdGVGb3J3
YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IGRpZFNldFNlbGVjdGlvblR5cGVzRm9yUGFzdGVib2Fy
ZDpbTlNQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXV07CiB9CiAKLU5TU3RyaW5nKiBXZWJF
ZGl0b3JDbGllbnQ6OnVzZXJWaXNpYmxlU3RyaW5nKE5TVVJMICpVUkwpCitOU1N0cmluZyAqV2Vi
RWRpdG9yQ2xpZW50Ojp1c2VyVmlzaWJsZVN0cmluZyhOU1VSTCAqVVJMKQogewogICAgIHJldHVy
biBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwogfQogCi1zdGF0aWMgTlNBcnJheSogZXhj
bHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCkKK3N0YXRpYyBOU0Fy
cmF5ICpjcmVhdGVFeGNsdWRlZEVsZW1lbnRzRm9yQXR0cmlidXRlZFN0cmluZ0NvbnZlcnNpb24o
KQogewotICAgIHN0YXRpYyBOU0FycmF5ICplbGVtZW50cyA9IG5pbDsKLSAgICBpZiAoZWxlbWVu
dHMgPT0gbmlsKSB7Ci0gICAgICAgIGVsZW1lbnRzID0gW1tOU0FycmF5IGFsbG9jXSBpbml0V2l0
aE9iamVjdHM6Ci0gICAgICAgICAgICAgICAgICAgIC8vIE9taXQgc3R5bGUgc2luY2Ugd2Ugd2Fu
dCBzdHlsZSB0byBiZSBpbmxpbmUgc28gdGhlIGZyYWdtZW50IGNhbiBiZSBlYXNpbHkgaW5zZXJ0
ZWQuCi0gICAgICAgICAgICAgICAgICAgIEAic3R5bGUiLAotICAgICAgICAgICAgICAgICAgICAv
LyBPbWl0IHhtbCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBYSFRNTC4KLSAgICAgICAgICAgICAgICAg
ICAgQCJ4bWwiLCAKLSAgICAgICAgICAgICAgICAgICAgLy8gT21pdCB0YWdzIHRoYXQgd2lsbCBn
ZXQgc3RyaXBwZWQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBmcmFnbWVudCBhbnl3YXkuCi0gICAgICAg
ICAgICAgICAgICAgIEAiZG9jdHlwZSIsIEAiaHRtbCIsIEAiaGVhZCIsIEAiYm9keSIsCi0gICAg
ICAgICAgICAgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgotICAgICAgICAgICAgICAg
ICAgICBAImFwcGxldCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJmb250Iiwg
QCJpc2luZGV4IiwgQCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLAotICAgICAgICAgICAg
ICAgICAgICAvLyBPbWl0IG9iamVjdCBzbyBubyBmaWxlIGF0dGFjaG1lbnRzIGFyZSBwYXJ0IG9m
IHRoZSBmcmFnbWVudC4KLSAgICAgICAgICAgICAgICAgICAgQCJvYmplY3QiLCBuaWxdOwotICAg
ICAgICBDRlJldGFpbihlbGVtZW50cyk7Ci0gICAgfQorICAgIE5TQXJyYXkgKmVsZW1lbnRzID0g
W1tOU0FycmF5IGFsbG9jXSBpbml0V2l0aE9iamVjdHM6IAorICAgICAgICAvLyBPbWl0IHN0eWxl
IHNpbmNlIHdlIHdhbnQgc3R5bGUgdG8gYmUgaW5saW5lIHNvIHRoZSBmcmFnbWVudCBjYW4gYmUg
ZWFzaWx5IGluc2VydGVkLgorICAgICAgICBAInN0eWxlIiwgCisgICAgICAgIC8vIE9taXQgeG1s
IHNvIHRoZSByZXN1bHQgaXMgbm90IFhIVE1MLgorICAgICAgICBAInhtbCIsIAorICAgICAgICAv
LyBPbWl0IHRhZ3MgdGhhdCB3aWxsIGdldCBzdHJpcHBlZCB3aGVuIGNvbnZlcnRlZCB0byBhIGZy
YWdtZW50IGFueXdheS4KKyAgICAgICAgQCJkb2N0eXBlIiwgQCJodG1sIiwgQCJoZWFkIiwgQCJi
b2R5IiwgCisgICAgICAgIC8vIE9taXQgZGVwcmVjYXRlZCB0YWdzLgorICAgICAgICBAImFwcGxl
dCIsIEAiYmFzZWZvbnQiLCBAImNlbnRlciIsIEAiZGlyIiwgQCJmb250IiwgQCJpc2luZGV4Iiwg
QCJtZW51IiwgQCJzIiwgQCJzdHJpa2UiLCBAInUiLCAKKyAgICAgICAgLy8gT21pdCBvYmplY3Qg
c28gbm8gZmlsZSBhdHRhY2htZW50cyBhcmUgcGFydCBvZiB0aGUgZnJhZ21lbnQuCisgICAgICAg
IEAib2JqZWN0IiwgbmlsXTsKKyAgICBDRlJldGFpbihlbGVtZW50cyk7CiAgICAgcmV0dXJuIGVs
ZW1lbnRzOwogfQogCi1Eb2N1bWVudEZyYWdtZW50KiBXZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50
RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcqIHN0cmluZywg
VmVjdG9yPEFyY2hpdmVSZXNvdXJjZSo+JiByZXNvdXJjZXMpCitEb2N1bWVudEZyYWdtZW50KiBX
ZWJFZGl0b3JDbGllbnQ6OmRvY3VtZW50RnJhZ21lbnRGcm9tQXR0cmlidXRlZFN0cmluZyhOU0F0
dHJpYnV0ZWRTdHJpbmcgKnN0cmluZywgVmVjdG9yPCBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiA+
JiByZXNvdXJjZXMpCiB7Ci0gICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU0RpY3Rp
b25hcnkgYWxsb2NdIGluaXRXaXRoT2JqZWN0c0FuZEtleXM6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdD
b252ZXJzaW9uKCksIE5TRXhjbHVkZWRFbGVtZW50c0RvY3VtZW50QXR0cmlidXRlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2ViVmlldywgQCJXZWJSZXNvdXJj
ZUhhbmRsZXIiLCBuaWxdOworICAgIHN0YXRpYyBOU0FycmF5ICpleGNsdWRlZEVsZW1lbnRzID0g
Y3JlYXRlRXhjbHVkZWRFbGVtZW50c0ZvckF0dHJpYnV0ZWRTdHJpbmdDb252ZXJzaW9uKCk7Cisg
ICAgCisgICAgTlNEaWN0aW9uYXJ5ICpkaWN0aW9uYXJ5ID0gW1tOU0RpY3Rpb25hcnkgYWxsb2Nd
IGluaXRXaXRoT2JqZWN0c0FuZEtleXM6IGV4Y2x1ZGVkRWxlbWVudHMsIE5TRXhjbHVkZWRFbGVt
ZW50c0RvY3VtZW50QXR0cmlidXRlLCAKKyAgICAgICAgbmlsLCBAIldlYlJlc291cmNlSGFuZGxl
ciIsIG5pbF07CiAgICAgCi0gICAgTlNBcnJheSogczsKLSAgICBET01Eb2N1bWVudEZyYWdtZW50
KiBmcmFnbWVudCA9IFtzdHJpbmcgX2RvY3VtZW50RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFtz
dHJpbmcgbGVuZ3RoXSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkb2N1bWVudDpbW21fd2ViVmlldyBtYWluRnJhbWVdIERPTURvY3VtZW50
XSAKKyAgICBOU0FycmF5ICpzdWJSZXNvdXJjZXM7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQgPSBbc3RyaW5nIF9kb2N1bWVudEZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbc3Ry
aW5nIGxlbmd0aF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb2N1bWVudDpbW21fd2ViVmlldyBtYWluRnJhbWVdIERPTURvY3VtZW50XQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEF0dHJp
YnV0ZXM6ZGljdGlvbmFyeQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdWJyZXNvdXJjZXM6JnNdOwotICAgIE5TRW51bWVyYXRvciAqZSA9IFtzIG9i
amVjdEVudW1lcmF0b3JdOwotICAgIFdlYlJlc291cmNlICpyOwotICAgIHdoaWxlICgociA9IFtl
IG5leHRPYmplY3RdKSkgewotICAgICAgICBSZWZQdHI8QXJjaGl2ZVJlc291cmNlPiAgYXIgPSBb
ciBfY29yZVJlc291cmNlXTsKLSAgICAgICAgcmVzb3VyY2VzLmFwcGVuZChhci5nZXQoKSk7Ci0g
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dWJyZXNvdXJjZXM6JnN1YlJlc291cmNlc107CisgICAgZm9yIChXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UgaW4gc3ViUmVzb3VyY2VzKQorICAgICAgICByZXNvdXJjZXMuYXBwZW5kKFtyZXNvdXJjZSBf
Y29yZVJlc291cmNlXSk7CisgICAgCiAgICAgW2RpY3Rpb25hcnkgcmVsZWFzZV07CiAgICAgcmV0
dXJuIGNvcmUoZnJhZ21lbnQpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6c2V0SW5zZXJ0
aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQpCit2b2lkIFdlYkVkaXRvckNs
aWVudDo6c2V0SW5zZXJ0aW9uUGFzdGVib2FyZChOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQpCiB7
CiAgICAgW21fd2ViVmlldyBfc2V0SW5zZXJ0aW9uUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsKIH0K
IAogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCi1OU0FycmF5KiBXZWJFZGl0b3JDbGllbnQ6OnBh
c3RlYm9hcmRUeXBlc0ZvclNlbGVjdGlvbihGcmFtZSogc2VsZWN0ZWRGcmFtZSkKK05TQXJyYXkg
KldlYkVkaXRvckNsaWVudDo6cGFzdGVib2FyZFR5cGVzRm9yU2VsZWN0aW9uKEZyYW1lKiBzZWxl
Y3RlZEZyYW1lKQogewogICAgIFdlYkZyYW1lKiBmcmFtZSA9IGtpdChzZWxlY3RlZEZyYW1lKTsK
ICAgICByZXR1cm4gW1tbZnJhbWUgZnJhbWVWaWV3XSBkb2N1bWVudFZpZXddIHBhc3RlYm9hcmRU
eXBlc0ZvclNlbGVjdGlvbl07Cg==
</data>
<flag name="review"
          id="57412"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68622</attachid>
            <date>2010-09-23 16:52:01 -0700</date>
            <delta_ts>2010-09-24 16:29:08 -0700</delta_ts>
            <desc>Patch4</desc>
            <filename>last-paste.txt</filename>
            <type>text/plain</type>
            <size>16279</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODIxMikKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDggQEAKKzIwMTAtMDktMjMgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YXVpOiBQYXN0ZWJvYXJkIHN1cHBvcnQgKDQyMzE3KQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NzY2MDUzNz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQyMzE3CisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHRoZSBmaW5hbCBwaWVjZSBvZiB0aGUg
cGFzdGVib2FyZCBzdXBwb3J0IGZvciBXZWJLaXQyLgorICAgICAgICBUaGUgbWVudSB2YWxpZGF0
aW9uIGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IgTWFjLiBUaGUgdmFsaWRhdGlvbiBpcworICAgICAg
ICBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHkgYW5kIHRoZSBtZW51IGVudHJpZXMgdXBkYXRlZCB3
aGlsZSB0aGUgbWVudQorICAgICAgICBpcyB2aXNpYmxlLiBJJ3ZlIGNyZWF0ZWQgYSBnZW5lcmlj
IG1lY2hhbmlzbSB0byBjYWxsIGVkaXRpbmcgY29tbWFuZHMKKyAgICAgICAgdGhhdCB3aWxsIG1h
a2UgaXQgZWFzeSB0byBhZGQgbmV3IGNvbW1hbmRzIHdlIHdpbGwgc3VwcG9ydCBpbiB0aGUgZnV0
dXJlLgorICAgICAgICBUaGUgY29tbWFuZHMgc3VwcG9ydGVkIG5vdyBhcmUgY29weSwgY3V0LCBw
YXN0ZSwgcGFzdGVBc1BsYWluVGV4dCwgZGVsZXRlCisgICAgICAgIGFuZCBzZWxlY3RBbGwuCisg
ICAgICAgIAorICAgICAgICAqIFNoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNz
YWdlS2luZHMuaDogQWRkZWQgRGlkVmFsaWRhdGVNZW51SXRlbS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oOiBBZGRlZCBlbmFibGVNZW51SXRlbS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbTogQWRkZWQgZW5hYmxlTWVu
dUl0ZW0gaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpl
bmFibGVNZW51SXRlbSk6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbToKKyAgICAgICAgKGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKTogQWRkZWQuCisgICAg
ICAgIChjb21tYW5kTmFtZUZvclNlbGVjdG9yKTogQWRkZWQuCisgICAgICAgICgtW1dLVmlldyB2
YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOl0pOiBBZGRlZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAg
ICAgKC1bV0tWaWV3IF9lbmFibGVNZW51SXRlbTpzdGF0ZTpdKTogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDogQWRkZWQgbWVtYmVyIHZhcmlhYmxl
cworICAgICAgICB0byBzdXBwb3J0IG1lbnUgdmFsaWRhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nl
c3MvUGFnZUNsaWVudC5oOiBBZGRlZCBlbmFibGVNZW51SXRlbS4KKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcDogUmVtb3ZlZCBjdXQsIGNvcHksIHBhc3RlIGFuZAorICAgICAg
ICBzZWxlY3RBbGwuIE5vdyB0aGUgY29tbWFuZHMgYXJlIHN1cHBvcnRlZCB2aWEgYSBnZW5lcmlj
CisgICAgICAgIG1lY2hhbmlzbS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp2YWxp
ZGF0ZU1lbnVJdGVtKTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZWRp
dGluZ0NvbW1hbmQpOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRS
ZWNlaXZlTWVzc2FnZSk6IE5vdyBwcm9jZXNzaW5nIGFsc28KKyAgICAgICAgRGlkVmFsaWRhdGVN
ZW51SXRlbS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpleGVjdXRlRWRpdGluZ0NvbW1hbmQpOiBGaXhlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6aXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQpOiBGaXhlZC4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6dmFsaWRhdGVNZW51SXRlbSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjplZGl0aW5nQ29tbWFuZCk6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmg6IFJlbW92ZWQgY3V0LCBjb3B5LCBwYXN0ZSwgc2VsZWN0QWxsLgorICAgICAgICBB
ZGRlZCB2YWxpZGF0ZU1lbnVJdGVtIGFuZCBlZGl0aW5nQ29tbWFuZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogQWRkZWQgbmV3IG1lc3NhZ2VzLgor
CiAyMDEwLTA5LTIzICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgdGhlIERyYXdpbmdBcmVhUHJveHkgcGFyYW1ldGVyIHRvCkluZGV4OiBXZWJLaXQyL1No
YXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2lu
ZHMuaAkocmV2aXNpb24gNjgyMTIpCisrKyBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9X
ZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBA
QCBlbnVtIEtpbmQgewogICAgIERpZFNldEZyYW1lLAogICAgIERpZFN0YXJ0UHJvZ3Jlc3MsCiAg
ICAgRGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKKyAgICBEaWRWYWxpZGF0ZU1lbnVJ
dGVtLAogICAgIFNldEN1cnNvciwKICAgICBTZXRTdGF0dXNUZXh0LAogICAgIFNldFRvb2xUaXAs
CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA2ODIxMikKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBw
dWJsaWM6CiAgICAgZW51bSBVbmRvT3JSZWRvIHsgVW5kbywgUmVkbyB9OwogICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4s
IFVuZG9PclJlZG8pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGVuYWJsZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYgY29t
bWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkKSA9IDA7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmcoKSA9IDA7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9u
IDY4MjEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMwLDM2ICszMzAsMTkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEFjdGl2ZShi
b29sIGFjdGl2ZQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QWN0
aXZlKGFjdGl2ZSksIG1fcGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdEFs
bCgpCit2b2lkIFdlYlBhZ2VQcm94eTo6dmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAg
ICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdEFsbCgpLCBtX3BhZ2VJ
RCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5Ojpjb3B5KCkKLXsKLSAgICBpZiAoIWlzVmFsaWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDb3B5KCksIG1fcGFnZUlEKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmN1dCgpCi17
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q3V0KCksIG1fcGFnZUlEKTsKKyAgICBwcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlZhbGlkYXRlTWVudUl0ZW0oY29tbWFuZE5hbWUpLCBt
X3BhZ2VJRCk7CiB9Ci0KLXZvaWQgV2ViUGFnZVByb3h5OjpwYXN0ZSgpCisgICAgCit2b2lkIFdl
YlBhZ2VQcm94eTo6ZWRpdGluZ0NvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIHsK
ICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQYXN0ZSgpLCBtX3BhZ2VJRCk7CisgICAgcHJvY2Vzcygp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpFZGl0aW5nQ29tbWFuZChjb21tYW5kTmFtZSksIG1f
cGFnZUlEKTsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRJc0luV2luZG93KGJvb2wg
aXNJbldpbmRvdykKQEAgLTg1MSw2ICs4MzQsMTQgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJl
Y2VpdmVNZXNzYWdlKENvcgogICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkNsZWFy
QWxsRWRpdENvbW1hbmRzOgogICAgICAgICAgICAgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYlBhZ2VQcm94eU1lc3NhZ2U6OkRpZFZh
bGlkYXRlTWVudUl0ZW06IHsKKyAgICAgICAgICAgIGJvb2wgaXNFbmFibGVkOworICAgICAgICAg
ICAgU3RyaW5nIGNvbW1hbmROYW1lOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29k
ZShDb3JlSVBDOjpPdXQoY29tbWFuZE5hbWUsIGlzRW5hYmxlZCkpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIG1fcGFnZUNsaWVudC0+ZW5hYmxlTWVudUl0ZW0oY29tbWFu
ZE5hbWUsIGlzRW5hYmxlZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2ODIxMikK
KysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsMTcgKzEzMiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCBhY3RpdmUp
OwogICAgIHZvaWQgc2V0SXNJbldpbmRvdyhib29sIGlzSW5XaW5kb3cpOwogCisgICAgdm9pZCBl
ZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKKyAgICB2b2lkIHZhbGlk
YXRlTWVudUl0ZW0oY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSk7CisKIC8vIFRoZXNlIGFyZSBv
bmx5IHVzZWQgb24gTWFjIGN1cnJlbnRseS4KICNpZiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBz
ZXRXaW5kb3dJc1Zpc2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUpOwogICAgIHZvaWQgc2V0V2lu
ZG93RnJhbWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHNl
bGVjdEFsbCgpOwotICAgIHZvaWQgY29weSgpOwotICAgIHZvaWQgY3V0KCk7Ci0gICAgdm9pZCBw
YXN0ZSgpOwotICAgIAogICAgIHZvaWQgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50Jik7
CiAgICAgdm9pZCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKICAgICB2b2lkIGtl
eUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDY4MjEyKQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2
ICs1NCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1Jl
ZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgVW5kb09yUmVkbyk7CiAgICAgdm9pZCBjbGVhckFs
bEVkaXRDb21tYW5kcygpOworICAgIHZvaWQgZW5hYmxlTWVudUl0ZW0oY29uc3QgU3RyaW5nJiBj
b21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogICAgIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwpJ
bmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZp
c2lvbiA2ODIxMikKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEsMTEgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6Y2xlYXJBbGxFZGl0Q29tbWFuZAogICAgIFtbbV93a1ZpZXcgdW5kb01hbmFnZXJdIHJlbW92
ZUFsbEFjdGlvbnNXaXRoVGFyZ2V0Om1fdW5kb1RhcmdldC5nZXQoKV07CiB9CiAKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmVuYWJsZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJv
b2wgaXNFbmFibGVkKQoreworICAgIFttX3drVmlldyBfZW5hYmxlTWVudUl0ZW06Y29tbWFuZE5h
bWUgc3RhdGU6aXNFbmFibGVkXTsKK30KKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIHZvaWQgUGFnZUNsaWVudEltcGw6OnBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKQogewpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDY4
MjEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDYgKzQ3LDggQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgYm9vbD4gTWVudUVudHJp
ZXNNYXA7CisKIEBpbnRlcmZhY2UgV0tWaWV3RGF0YSA6IE5TT2JqZWN0IHsKIEBwdWJsaWMKICAg
ICBPd25QdHI8UGFnZUNsaWVudEltcGw+IF9wYWdlQ2xpZW50OwpAQCAtNjAsNiArNjIsMTEgQEAg
QGludGVyZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICBOU1ZpZXcgKl9sYXllckhvc3RpbmdWaWV3OwogI2VuZGlmCisgICAg
Ly8gRm9yIE1lbnVzLgorICAgIGludCBfbWVudUVudHJpZXNDb3VudDsKKyAgICBOU01lbnUgKl9j
dXJyZW50TWVudTsKKyAgICBib29sIF9uZWVkc0RhdGFGb3JWYWxpZGF0aW9uOworICAgIEhhc2hN
YXA8U3RyaW5nLCBib29sPiBfbWVudU1hcDsKIH0KIEBlbmQKIApAQCAtMTQ3LDMyICsxNTQsNzkg
QEAgLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiAgICAgX2RhdGEtPl9wYWdlLT5k
cmF3aW5nQXJlYSgpLT5zZXRTaXplKEludFNpemUoc2l6ZSkpOwogfQogCi0tIChCT09MKXZhbGlk
YXRlVXNlckludGVyZmFjZUl0ZW06KGlkIDxOU1ZhbGlkYXRlZFVzZXJJbnRlcmZhY2VJdGVtPilp
dGVtCit0eXBlZGVmIEhhc2hNYXA8U0VMLCBTdHJpbmc+IFNlbGVjdG9yTmFtZU1hcDsKKworLy8g
TWFwIHNlbGVjdG9ycyBpbnRvIEVkaXRvciBjb21tYW5kIG5hbWVzLgorLy8gVGhpcyBpcyBub3Qg
bmVlZGVkIGZvciBhbnkgc2VsZWN0b3JzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBF
ZGl0b3IgY29tbWFuZC4KK3N0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGNyZWF0ZVNlbGVj
dG9yRXhjZXB0aW9uTWFwKCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBuZWVkcyB0byBiZSBpbXBs
ZW1lbnRlZAotICAgIHJldHVybiBZRVM7CisgICAgU2VsZWN0b3JOYW1lTWFwKiBtYXAgPSBuZXcg
SGFzaE1hcDxTRUwsIFN0cmluZz47CisgICAgCisgICAgbWFwLT5hZGQoQHNlbGVjdG9yKGluc2Vy
dE5ld2xpbmVJZ25vcmluZ0ZpZWxkRWRpdG9yOiksICJJbnNlcnROZXdsaW5lIik7CisgICAgbWFw
LT5hZGQoQHNlbGVjdG9yKGluc2VydFBhcmFncmFwaFNlcGFyYXRvcjopLCAiSW5zZXJ0TmV3bGlu
ZSIpOworICAgIG1hcC0+YWRkKEBzZWxlY3RvcihpbnNlcnRUYWJJZ25vcmluZ0ZpZWxkRWRpdG9y
OiksICJJbnNlcnRUYWIiKTsKKyAgICBtYXAtPmFkZChAc2VsZWN0b3IocGFnZURvd246KSwgIk1v
dmVQYWdlRG93biIpOworICAgIG1hcC0+YWRkKEBzZWxlY3RvcihwYWdlRG93bkFuZE1vZGlmeVNl
bGVjdGlvbjopLCAiTW92ZVBhZ2VEb3duQW5kTW9kaWZ5U2VsZWN0aW9uIik7CisgICAgbWFwLT5h
ZGQoQHNlbGVjdG9yKHBhZ2VVcDopLCAiTW92ZVBhZ2VVcCIpOworICAgIG1hcC0+YWRkKEBzZWxl
Y3RvcihwYWdlVXBBbmRNb2RpZnlTZWxlY3Rpb246KSwgIk1vdmVQYWdlVXBBbmRNb2RpZnlTZWxl
Y3Rpb24iKTsKKyAgICAKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgU3RyaW5nIGNvbW1h
bmROYW1lRm9yU2VsZWN0b3IoU0VMIHNlbGVjdG9yKQoreworICAgIC8vIENoZWNrIHRoZSBleGNl
cHRpb24gbWFwIGZpcnN0LgorICAgIHN0YXRpYyBjb25zdCBTZWxlY3Rvck5hbWVNYXAqIGV4Y2Vw
dGlvbk1hcCA9IGNyZWF0ZVNlbGVjdG9yRXhjZXB0aW9uTWFwKCk7CisgICAgU2VsZWN0b3JOYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV4Y2VwdGlvbk1hcC0+ZmluZChzZWxlY3Rvcik7Cisg
ICAgaWYgKGl0ICE9IGV4Y2VwdGlvbk1hcC0+ZW5kKCkpCisgICAgICAgIHJldHVybiBpdC0+c2Vj
b25kOworICAgIAorICAgIC8vIFJlbW92ZSB0aGUgdHJhaWxpbmcgY29sb24uCisgICAgLy8gTm8g
bmVlZCB0byBjYXBpdGFsaXplIHRoZSBjb21tYW5kIG5hbWUgc2luY2UgRWRpdG9yIGNvbW1hbmQg
bmFtZXMgYXJlCisgICAgLy8gbm90IGNhc2Ugc2Vuc2l0aXZlLgorICAgIGNvbnN0IGNoYXIqIHNl
bGVjdG9yTmFtZSA9IHNlbF9nZXROYW1lKHNlbGVjdG9yKTsKKyAgICBzaXplX3Qgc2VsZWN0b3JO
YW1lTGVuZ3RoID0gc3RybGVuKHNlbGVjdG9yTmFtZSk7CisgICAgaWYgKHNlbGVjdG9yTmFtZUxl
bmd0aCA8IDIgfHwgc2VsZWN0b3JOYW1lW3NlbGVjdG9yTmFtZUxlbmd0aCAtIDFdICE9ICc6JykK
KyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJldHVybiBTdHJpbmcoc2VsZWN0b3JOYW1l
LCBzZWxlY3Rvck5hbWVMZW5ndGggLSAxKTsKIH0KIAogLy8gRWRpdGluZyBjb21tYW5kcworLy8g
RklYTUU6IHdlIHNob3VsZCBhZGQgaGVyZSBhbGwgdGhlIGNvbW1hbmRzIGFzIHdlIGltcGxlbWVu
dCB0aGVtLgogCi0tICh2b2lkKWNvcHk6KGlkKXNlbmRlcgoteyAKLSAgICBfZGF0YS0+X3BhZ2Ut
PmNvcHkoKTsKLX0KKyNkZWZpbmUgV0VCQ09SRV9DT01NQU5EKGNvbW1hbmQsIG5hbWUpIC0gKHZv
aWQpY29tbWFuZDooaWQpc2VuZGVyIHsgX2RhdGEtPl9wYWdlLT5lZGl0aW5nQ29tbWFuZChjb21t
YW5kTmFtZUZvclNlbGVjdG9yKF9jbWQpKTsgfQogCi0tICh2b2lkKWN1dDooaWQpc2VuZGVyCi17
IAotICAgIF9kYXRhLT5fcGFnZS0+Y3V0KCk7Ci19CitXRUJDT1JFX0NPTU1BTkQoY29weSwgQ29t
bWFuZENvcHkpCitXRUJDT1JFX0NPTU1BTkQoY3V0LCBDb21tYW5kQ3V0KQorV0VCQ09SRV9DT01N
QU5EKHBhc3RlLCBDb21tYW5kUGFzdGUpCitXRUJDT1JFX0NPTU1BTkQoZGVsZXRlLCBDb21tYW5k
RGVsZXRlKQorV0VCQ09SRV9DT01NQU5EKHBhc3RlQXNQbGFpblRleHQsIENvbW1hbmRQYXN0ZUFz
UGxhaW5UZXh0KQorV0VCQ09SRV9DT01NQU5EKHNlbGVjdEFsbCwgQ29tbWFuZFNlbGVjdEFsbCkK
IAotLSAodm9pZClwYXN0ZTooaWQpc2VuZGVyCi17IAotICAgIF9kYXRhLT5fcGFnZS0+cGFzdGUo
KTsKLX0KKyN1bmRlZiBXRUJDT1JFX0NPTU1BTkQKKworLy8gTWVudSBpdGVtcyB2YWxpZGF0aW9u
CiAKLS0gKHZvaWQpc2VsZWN0QWxsOihpZClzZW5kZXIKKy0gKEJPT0wpdmFsaWRhdGVVc2VySW50
ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFjZUl0ZW0+KWl0ZW0KIHsKLSAg
ICBfZGF0YS0+X3BhZ2UtPnNlbGVjdEFsbCgpOworICAgIFN0cmluZyBjb21tYW5kTmFtZSA9IGNv
bW1hbmROYW1lRm9yU2VsZWN0b3IoW2l0ZW0gYWN0aW9uXSk7CisgICAgaWYgKF9kYXRhLT5fbWVu
dU1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgX2RhdGEtPl9tZW51RW50cmllc0NvdW50ID0gMDsK
KyAgICAgICAgX2RhdGEtPl9uZWVkc0RhdGFGb3JWYWxpZGF0aW9uID0gdHJ1ZTsKKyAgICAgICAg
X2RhdGEtPl9jdXJyZW50TWVudSA9IFsoTlNNZW51SXRlbSAqKWl0ZW0gbWVudV07CisgICAgfQor
ICAgIGlmIChfZGF0YS0+X25lZWRzRGF0YUZvclZhbGlkYXRpb24pIHsKKyAgICAgICAgX2RhdGEt
Pl9tZW51TWFwLmFkZChjb21tYW5kTmFtZSwgZmFsc2UpOworICAgICAgICBfZGF0YS0+X21lbnVF
bnRyaWVzQ291bnQrKzsKKyAgICAgICAgX2RhdGEtPl9wYWdlLT52YWxpZGF0ZU1lbnVJdGVtKGNv
bW1hbmROYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBib29sIGlzRW5hYmxlZCA9IF9kYXRh
LT5fbWVudU1hcC50YWtlKGNvbW1hbmROYW1lKTsKKyAgICAgICAgaWYgKF9kYXRhLT5fbWVudU1h
cC5pc0VtcHR5KCkpCisgICAgICAgICAgICBfZGF0YS0+X25lZWRzRGF0YUZvclZhbGlkYXRpb24g
PSB0cnVlOworICAgICAgICByZXR1cm4gaXNFbmFibGVkOworICAgIH0KKworICAgIHJldHVybiBO
TzsKIH0KIAogLy8gRXZlbnRzCkBAIC00MTQsNiArNDY4LDIwIEBAIC0gKHZvaWQpX3NldEN1cnNv
cjooTlNDdXJzb3IgKiljdXJzb3IKICAgICBbY3Vyc29yIHNldF07CiB9CiAKKy0gKHZvaWQpX2Vu
YWJsZU1lbnVJdGVtOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIHN0YXRlOihCT09MKWlzRW5hYmxl
ZAoreworICAgIEFTU0VSVChfZGF0YS0+X21lbnVFbnRyaWVzQ291bnQpOworICAgIF9kYXRhLT5f
bWVudU1hcC5zZXQoY29tbWFuZE5hbWUsIGlzRW5hYmxlZCk7CisgICAgaWYgKC0tX2RhdGEtPl9t
ZW51RW50cmllc0NvdW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWxsIHRoZSBt
ZW51IGVudHJpZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZC4KKyAgICAvLyBDYWxsaW5nIHVwZGF0ZSB3
aWxsIHRyaWdnZXIgdGhlIHZhbGlkYXRpb24KKyAgICAvLyB0byBiZSBwZXJmb3JtZWQgd2l0aCB0
aGUgYWNxdWlyZWQgZGF0YS4KKyAgICBfZGF0YS0+X25lZWRzRGF0YUZvclZhbGlkYXRpb24gPSBm
YWxzZTsKKyAgICBbX2RhdGEtPl9jdXJyZW50TWVudSB1cGRhdGVdOworfQorCiAvLyBBbnkgbm9u
LXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0aGluZyByZWNvZ25pemFibGUgbWln
aHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZpbmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhC
QURGQUNFCiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
LmgJKHJldmlzaW9uIDY4MjEyKQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJ
bnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIEBpbnRlcmZhY2UgV0tW
aWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX3Rha2VGb2N1czooQk9PTClkaXJlY3Rpb247CiAtICh2
b2lkKV90b29sVGlwQ2hhbmdlZEZyb206KE5TU3RyaW5nICopb2xkVG9vbFRpcCB0bzooTlNTdHJp
bmcgKiluZXdUb29sVGlwOwogLSAodm9pZClfc2V0Q3Vyc29yOihOU0N1cnNvciAqKWN1cnNvcjsK
Ky0gKHZvaWQpX2VuYWJsZU1lbnVJdGVtOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIHN0YXRlOihC
T09MKWlzRW5hYmxlZDsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIC0gKHZv
aWQpX3N0YXJ0QWNjZWxlcmF0ZWRDb21wb3NpdGluZzooQ0FMYXllciAqKXJvb3RMYXllcjsKSW5k
ZXg6IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiA2ODIxMikK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTQsMTIgKzIxNCwxOSBAQCBTdHJpbmcgV2ViUGFnZTo6cmVuZGVyVHJlZUV4dGVybmFs
UmVwcmVzCiAKIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmlu
ZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCiB7Ci0gICAgbV9tYWluRnJh
bWUtPmNvcmVGcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSkuZXhlY3V0ZShh
cmd1bWVudCk7CisgICAgaWYgKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpKQorICAgICAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpLmV4ZWN1dGUoYXJndW1l
bnQpOwogfQogCiBib29sIFdlYlBhZ2U6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0
cmluZyYgY29tbWFuZE5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUo
KS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpLmlzRW5hYmxlZCgpOworICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OworICAgIGlmIChmcmFtZSkgeworICAgICAgICBFZGl0b3I6OkNvbW1hbmQgY29tbWFuZCA9IGZy
YW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSk7CisgICAgICAgIGlmIChjb21tYW5k
LmlzU3VwcG9ydGVkKCkpCisgICAgICAgICAgICByZXR1cm4gY29tbWFuZC5pc0VuYWJsZWQoKTsK
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIFdlYlBhZ2U6OmNsZWFyTWFpbkZy
YW1lTmFtZSgpCkBAIC00OTgsMzAgKzUwNSwxNiBAQCB2b2lkIFdlYlBhZ2U6OmtleUV2ZW50KGNv
bnN0IFdlYktleWJvYXJkCiAgICAgKHZvaWQpaGFuZGxlZDsKIH0KIAotdm9pZCBXZWJQYWdlOjpz
ZWxlY3RBbGwoKQordm9pZCBXZWJQYWdlOjp2YWxpZGF0ZU1lbnVJdGVtKGNvbnN0IFN0cmluZyYg
Y29tbWFuZE5hbWUpCiB7Ci0gICAgaWYgKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpKQotICAgICAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1
c2VkT3JNYWluRnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdEFsbCgpOworICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpEaWRW
YWxpZGF0ZU1lbnVJdGVtLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oY29tbWFuZE5hbWUsIGlzRWRp
dGluZ0NvbW1hbmRFbmFibGVkKGNvbW1hbmROYW1lKSkpOwogfQogCi12b2lkIFdlYlBhZ2U6OmNv
cHkoKQordm9pZCBXZWJQYWdlOjplZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lKQogewotICAgIGlmIChtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWlu
RnJhbWUoKSkKLSAgICAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFp
bkZyYW1lKCktPmVkaXRvcigpLT5jb3B5KCk7CisgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNv
bW1hbmROYW1lLCBTdHJpbmcoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6Y3V0KCkKLXsKLSAgICBp
ZiAobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCi0gICAg
ICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0
b3IoKS0+Y3V0KCk7Ci19Ci0KLXZvaWQgV2ViUGFnZTo6cGFzdGUoKQotewotICAgIGlmIChtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSkKLSAgICAgICAgbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5w
YXN0ZSgpOwotfSAgICAKLSAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBXZWJQ
YWdlOjp0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkluZGV4
OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA2ODIxMikKKysrIFdl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTg3
LDEwICsxODcsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbW91c2VFdmVudChjb25zdCBXZWJNb3Vz
ZUV2ZW50Jik7CiAgICAgdm9pZCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKICAg
ICB2b2lkIGtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2b2lkIHNlbGVj
dEFsbCgpOwotICAgIHZvaWQgY29weSgpOwotICAgIHZvaWQgY3V0KCk7Ci0gICAgdm9pZCBwYXN0
ZSgpOworICAgIHZvaWQgdmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IGVkaXRpbmdDb21tYW5kKGNvbnN0IFN0cmluZyYpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CiAgICAgdm9pZCB0b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmKTsKICNlbmRpZgpJbmRl
eDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShy
ZXZpc2lvbiA2ODIxMikKKysrIFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1Nyw4IEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2UgewogICAgIENsb3NlKCkKICAgICBUcnlDbG9zZSgpCiAKLSAgICBDb3B5KCkKLSAgICBD
dXQoKQotICAgIFBhc3RlKCkKLSAgICBTZWxlY3RBbGwoKQorICAgIFZhbGlkYXRlTWVudUl0ZW0o
V1RGOjpTdHJpbmcgbmFtZSkKKyAgICBFZGl0aW5nQ29tbWFuZChXVEY6OlN0cmluZyBuYW1lKQog
CiAgICAgRGlkUmVtb3ZlRWRpdENvbW1hbmQodWludDY0X3QgY29tbWFuZElEKQogICAgIFJlYXBw
bHlFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpCg==
</data>
<flag name="review"
          id="58175"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68788</attachid>
            <date>2010-09-24 16:29:08 -0700</date>
            <delta_ts>2010-09-24 17:25:38 -0700</delta_ts>
            <desc>Patch5</desc>
            <filename>last-paste.txt</filename>
            <type>text/plain</type>
            <size>17649</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODMwOSkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDktMjQgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBN
YXVpOiBQYXN0ZWJvYXJkIHN1cHBvcnQgKDQyMzE3KQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NzY2MDUzNz4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQyMzE3CisgICAgICAgIAorICAgICAgICBUaGlzIGlzIHRoZSBmaW5hbCBwaWVjZSBvZiB0aGUg
cGFzdGVib2FyZCBzdXBwb3J0IGZvciBXZWJLaXQyLgorICAgICAgICBUaGUgbWVudSB2YWxpZGF0
aW9uIGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IgTWFjLiBUaGUgdmFsaWRhdGlvbiBpcworICAgICAg
ICBwZXJmb3JtZWQgYXN5bmNocm9ub3VzbHkgYW5kIHRoZSBtZW51IGVudHJpZXMgdXBkYXRlZCB3
aGlsZSB0aGUgbWVudQorICAgICAgICBpcyB2aXNpYmxlLiBJJ3ZlIGNyZWF0ZWQgYSBnZW5lcmlj
IG1lY2hhbmlzbSB0byBjYWxsIGVkaXRpbmcgY29tbWFuZHMKKyAgICAgICAgdGhhdCB3aWxsIG1h
a2UgaXQgZWFzeSB0byBhZGQgbmV3IGNvbW1hbmRzIHdlIHdpbGwgc3VwcG9ydCBpbiB0aGUgZnV0
dXJlLgorICAgICAgICBUaGUgY29tbWFuZHMgc3VwcG9ydGVkIG5vdyBhcmUgY29weSwgY3V0LCBw
YXN0ZSwgcGFzdGVBc1BsYWluVGV4dCwgZGVsZXRlCisgICAgICAgIGFuZCBzZWxlY3RBbGwuCisK
KyAgICAgICAgKiBTaGFyZWQvQ29yZUlQQ1N1cHBvcnQvV2ViUGFnZVByb3h5TWVzc2FnZUtpbmRz
Lmg6IEFkZGVkIERpZFZhbGlkYXRlTWVudUl0ZW0uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9t
YWMvUGFnZUNsaWVudEltcGwuaDogQWRkZWQgc2V0RWRpdENvbW1hbmRTdGF0ZS4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbTogQWRkZWQgc2V0RWRpdENvbW1h
bmRTdGF0ZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OnNldEVkaXRDb21tYW5kU3RhdGUpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21h
Yy9XS1ZpZXcubW06CisgICAgICAgIChXZWJDb3JlOjpNZW51SXRlbUluZm86Ok1lbnVJdGVtSW5m
byk6CisgICAgICAgICgtW1dLVmlldyBpbml0V2l0aEZyYW1lOnBhZ2VOYW1lc3BhY2VSZWY6XSk6
CisgICAgICAgIChjcmVhdGVTZWxlY3RvckV4Y2VwdGlvbk1hcCk6IEFkZGVkLgorICAgICAgICAo
Y29tbWFuZE5hbWVGb3JTZWxlY3Rvcik6IEFkZGVkLgorICAgICAgICAoLVtXS1ZpZXcgdmFsaWRh
dGVVc2VySW50ZXJmYWNlSXRlbTpdKTogQWRkZWQgaW1wbGVtZW50YXRpb24uCisgICAgICAgICgt
W1dLVmlldyBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTplbmFibGVkOnN0YXRlOl0pOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dmFsaWRhdGVNZW51SXRl
bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSk6IE5vdyBw
cm9jZXNzaW5nIGFsc28KKyAgICAgICAgRGlkVmFsaWRhdGVNZW51SXRlbS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlRWRpdGluZ0NvbW1h
bmQpOiBGaXhlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aXNFZGl0aW5nQ29tbWFuZEVu
YWJsZWQpOiBGaXhlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dmFsaWRhdGVNZW51SXRl
bSk6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmQp
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBSZW1vdmVk
IGN1dCwgY29weSwgcGFzdGUsIHNlbGVjdEFsbC4KKyAgICAgICAgQWRkZWQgdmFsaWRhdGVNZW51
SXRlbSBhbmQgZXhlY3V0ZUVkaXRDb21tYW5kLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluOiBBZGRlZCBuZXcgbWVzc2FnZXMuCisKIDIwMTAtMDktMjQg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdpdmUgd2luZG93ZWQg
TmV0c2NhcGUgcGx1Z2lucyB0aGVpciBvd24gd2luZG93CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9D
b3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdlUHJveHlNZXNzYWdlS2luZHMuaAko
cmV2aXNpb24gNjgzMDcpCisrKyBXZWJLaXQyL1NoYXJlZC9Db3JlSVBDU3VwcG9ydC9XZWJQYWdl
UHJveHlNZXNzYWdlS2luZHMuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBlbnVt
IEtpbmQgewogICAgIERpZFNldEZyYW1lLAogICAgIERpZFN0YXJ0UHJvZ3Jlc3MsCiAgICAgRGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSwKKyAgICBEaWRWYWxpZGF0ZU1lbnVJdGVtLAog
ICAgIFNldEN1cnNvciwKICAgICBTZXRTdGF0dXNUZXh0LAogICAgIFNldFRvb2xUaXAsCkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA2ODMwNykKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6
CiAgICAgZW51bSBVbmRvT3JSZWRvIHsgVW5kbywgUmVkbyB9OwogICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFVuZG9P
clJlZG8pID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSkgPSAwOwogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkgPSAwOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiA2ODMwNykKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzMywzNiArMzMzLDE5IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRBY3RpdmUoYm9vbCBhY3RpdmUKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNldEFjdGl2ZShhY3RpdmUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
OjpzZWxlY3RBbGwoKQordm9pZCBXZWJQYWdlUHJveHk6OnZhbGlkYXRlTWVudUl0ZW0oY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuOwotCi0gICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RBbGwo
KSwgbV9wYWdlSUQpOwotfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6Y29weSgpCi17Ci0gICAgaWYg
KCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZTo6Q29weSgpLCBtX3BhZ2VJRCk7Ci19Ci0KLXZvaWQgV2ViUGFnZVByb3h5
OjpjdXQoKQotewotICAgIGlmICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBw
cm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkN1dCgpLCBtX3BhZ2VJRCk7CisgICAg
cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpWYWxpZGF0ZU1lbnVJdGVtKGNvbW1h
bmROYW1lKSwgbV9wYWdlSUQpOwogfQotCi12b2lkIFdlYlBhZ2VQcm94eTo6cGFzdGUoKQorICAg
IAordm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBhc3RlKCksIG1fcGFnZUlEKTsK
KyAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29tbWFu
ZChjb21tYW5kTmFtZSksIG1fcGFnZUlEKTsKIH0KICAgICAKIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRJc0luV2luZG93KGJvb2wgaXNJbldpbmRvdykKQEAgLTg2Niw2ICs4NDksMTUgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlKENvcgogICAgICAgICBjYXNlIFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkNsZWFyQWxsRWRpdENvbW1hbmRzOgogICAgICAgICAgICAgY2xlYXJBbGxF
ZGl0Q29tbWFuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYlBhZ2VQ
cm94eU1lc3NhZ2U6OkRpZFZhbGlkYXRlTWVudUl0ZW06IHsKKyAgICAgICAgICAgIGludCBzdGF0
ZTsKKyAgICAgICAgICAgIGJvb2wgaXNFbmFibGVkOworICAgICAgICAgICAgU3RyaW5nIGNvbW1h
bmROYW1lOworICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQo
Y29tbWFuZE5hbWUsIGlzRW5hYmxlZCwgc3RhdGUpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBtX3BhZ2VDbGllbnQtPnNldEVkaXRDb21tYW5kU3RhdGUoY29tbWFuZE5h
bWUsIGlzRW5hYmxlZCwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gNjgz
MDcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMTMzLDE3ICsxMzMsMTUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgYWN0
aXZlKTsKICAgICB2b2lkIHNldElzSW5XaW5kb3coYm9vbCBpc0luV2luZG93KTsKIAorICAgIHZv
aWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUpOworICAgIHZv
aWQgdmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKTsKKwogLy8gVGhl
c2UgYXJlIG9ubHkgdXNlZCBvbiBNYWMgY3VycmVudGx5LgogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICB2b2lkIHNldFdpbmRvd0lzVmlzaWJsZShib29sIHdpbmRvd0lzVmlzaWJsZSk7CiAgICAgdm9p
ZCBzZXRXaW5kb3dGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAjZW5kaWYKIAotICAg
IHZvaWQgc2VsZWN0QWxsKCk7Ci0gICAgdm9pZCBjb3B5KCk7Ci0gICAgdm9pZCBjdXQoKTsKLSAg
ICB2b2lkIHBhc3RlKCk7Ci0gICAgCiAgICAgdm9pZCBtb3VzZUV2ZW50KGNvbnN0IFdlYk1vdXNl
RXZlbnQmKTsKICAgICB2b2lkIHdoZWVsRXZlbnQoY29uc3QgV2ViV2hlZWxFdmVudCYpOwogICAg
IHZvaWQga2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYpOwpJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAkocmV2aXNpb24gNjgzMDcpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcmVnaXN0ZXJFZGl0Q29tbWFu
ZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBVbmRvT3JSZWRvKTsKICAgICB2b2lk
IGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7CisgICAgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQgc3RhdGUpOwogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgcGFnZURpZEVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9Q
YWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFj
L1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA2ODMwNykKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMSw2ICsyMDEs
MTEgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJBbGxFZGl0Q29tbWFuZAogICAgIFtbbV93
a1ZpZXcgdW5kb01hbmFnZXJdIHJlbW92ZUFsbEFjdGlvbnNXaXRoVGFyZ2V0Om1fdW5kb1Rhcmdl
dC5nZXQoKV07CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnNldEVkaXRDb21tYW5kU3RhdGUo
Y29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBuZXdTdGF0ZSkK
K3sKKyAgICBbbV93a1ZpZXcgX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6Y29tbWFuZE5hbWUg
ZW5hYmxlZDppc0VuYWJsZWQgc3RhdGU6bmV3U3RhdGVdOworfQorCiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQkocmV2aXNpb24gNjgzMDcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2ltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbXBvcnQgPHd0Zi9S
ZWZQdHIuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjAsNiArNjEsMjEgQEAgQGludGVy
ZmFjZSBXS1ZpZXdEYXRhIDogTlNPYmplY3QgewogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBOU1ZpZXcgKl9sYXllckhvc3RpbmdWaWV3OwogI2VuZGlmCisgICAgLy8gRm9y
IE1lbnVzLgorICAgIGludCBfbWVudUVudHJpZXNDb3VudDsKKyAgICBWZWN0b3I8UmV0YWluUHRy
PE5TTWVudT4gPiBfbWVudUxpc3Q7CisgICAgYm9vbCBfbmVlZHNEYXRhRm9yVmFsaWRhdGlvbjsK
KyAgICAKKyAgICBjbGFzcyBNZW51SXRlbUluZm8geworICAgIHB1YmxpYzoKKyAgICAgICAgTWVu
dUl0ZW1JbmZvKCk6IF9pc0VuYWJsZWQoZmFsc2UpLCBfc3RhdGUoMCkge307CisgICAgICAgIE1l
bnVJdGVtSW5mbyhib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKTogX2lzRW5hYmxlZChpc0VuYWJs
ZWQpLCBfc3RhdGUoc3RhdGUpIHt9OworICAgICAgICBib29sIF9pc0VuYWJsZWQ7CisgICAgICAg
IGludCBfc3RhdGU7CisgICAgfTsKKyAgICAKKyAgICAKKyAgICBIYXNoTWFwPFN0cmluZywgTWVu
dUl0ZW1JbmZvPiBfbWVudU1hcDsKIH0KIEBlbmQKIApAQCAtOTEsNiArMTA3LDkgQEAgLSAoaWQp
aW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHBhZ2VOYQogICAgIF9kYXRhLT5fcGFnZS0+c2V0
RHJhd2luZ0FyZWEoQ2h1bmtlZFVwZGF0ZURyYXdpbmdBcmVhUHJveHk6OmNyZWF0ZShzZWxmKSk7
CiAgICAgX2RhdGEtPl9wYWdlLT5pbml0aWFsaXplV2ViUGFnZShJbnRTaXplKGZyYW1lLnNpemUp
KTsKICAgICBfZGF0YS0+X3BhZ2UtPnNldElzSW5XaW5kb3coW3NlbGYgd2luZG93XSk7CisgICAg
CisgICAgX2RhdGEtPl9tZW51RW50cmllc0NvdW50ID0gMDsKKyAgICBfZGF0YS0+X25lZWRzRGF0
YUZvclZhbGlkYXRpb24gPSB0cnVlOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CkBAIC0xNDcsMzIg
KzE2Niw4MiBAQCAtICh2b2lkKXNldEZyYW1lU2l6ZTooTlNTaXplKXNpemUKICAgICBfZGF0YS0+
X3BhZ2UtPmRyYXdpbmdBcmVhKCktPnNldFNpemUoSW50U2l6ZShzaXplKSk7CiB9CiAKLS0gKEJP
T0wpdmFsaWRhdGVVc2VySW50ZXJmYWNlSXRlbTooaWQgPE5TVmFsaWRhdGVkVXNlckludGVyZmFj
ZUl0ZW0+KWl0ZW0KK3R5cGVkZWYgSGFzaE1hcDxTRUwsIFN0cmluZz4gU2VsZWN0b3JOYW1lTWFw
OworCisvLyBNYXAgc2VsZWN0b3JzIGludG8gRWRpdG9yIGNvbW1hbmQgbmFtZXMuCisvLyBUaGlz
IGlzIG5vdCBuZWVkZWQgZm9yIGFueSBzZWxlY3RvcnMgdGhhdCBoYXZlIHRoZSBzYW1lIG5hbWUg
YXMgdGhlIEVkaXRvciBjb21tYW5kLgorc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1hcCogY3Jl
YXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKQogewotICAgIC8vIEZJWE1FOiB0aGlzIG5lZWRzIHRv
IGJlIGltcGxlbWVudGVkCi0gICAgcmV0dXJuIFlFUzsKKyAgICBTZWxlY3Rvck5hbWVNYXAqIG1h
cCA9IG5ldyBIYXNoTWFwPFNFTCwgU3RyaW5nPjsKKyAgICAKKyAgICBtYXAtPmFkZChAc2VsZWN0
b3IoaW5zZXJ0TmV3bGluZUlnbm9yaW5nRmllbGRFZGl0b3I6KSwgIkluc2VydE5ld2xpbmUiKTsK
KyAgICBtYXAtPmFkZChAc2VsZWN0b3IoaW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yOiksICJJbnNl
cnROZXdsaW5lIik7CisgICAgbWFwLT5hZGQoQHNlbGVjdG9yKGluc2VydFRhYklnbm9yaW5nRmll
bGRFZGl0b3I6KSwgIkluc2VydFRhYiIpOworICAgIG1hcC0+YWRkKEBzZWxlY3RvcihwYWdlRG93
bjopLCAiTW92ZVBhZ2VEb3duIik7CisgICAgbWFwLT5hZGQoQHNlbGVjdG9yKHBhZ2VEb3duQW5k
TW9kaWZ5U2VsZWN0aW9uOiksICJNb3ZlUGFnZURvd25BbmRNb2RpZnlTZWxlY3Rpb24iKTsKKyAg
ICBtYXAtPmFkZChAc2VsZWN0b3IocGFnZVVwOiksICJNb3ZlUGFnZVVwIik7CisgICAgbWFwLT5h
ZGQoQHNlbGVjdG9yKHBhZ2VVcEFuZE1vZGlmeVNlbGVjdGlvbjopLCAiTW92ZVBhZ2VVcEFuZE1v
ZGlmeVNlbGVjdGlvbiIpOworICAgIAorICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBTdHJp
bmcgY29tbWFuZE5hbWVGb3JTZWxlY3RvcihTRUwgc2VsZWN0b3IpCit7CisgICAgLy8gQ2hlY2sg
dGhlIGV4Y2VwdGlvbiBtYXAgZmlyc3QuCisgICAgc3RhdGljIGNvbnN0IFNlbGVjdG9yTmFtZU1h
cCogZXhjZXB0aW9uTWFwID0gY3JlYXRlU2VsZWN0b3JFeGNlcHRpb25NYXAoKTsKKyAgICBTZWxl
Y3Rvck5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXhjZXB0aW9uTWFwLT5maW5kKHNlbGVj
dG9yKTsKKyAgICBpZiAoaXQgIT0gZXhjZXB0aW9uTWFwLT5lbmQoKSkKKyAgICAgICAgcmV0dXJu
IGl0LT5zZWNvbmQ7CisgICAgCisgICAgLy8gUmVtb3ZlIHRoZSB0cmFpbGluZyBjb2xvbi4KKyAg
ICAvLyBObyBuZWVkIHRvIGNhcGl0YWxpemUgdGhlIGNvbW1hbmQgbmFtZSBzaW5jZSBFZGl0b3Ig
Y29tbWFuZCBuYW1lcyBhcmUKKyAgICAvLyBub3QgY2FzZSBzZW5zaXRpdmUuCisgICAgY29uc3Qg
Y2hhciogc2VsZWN0b3JOYW1lID0gc2VsX2dldE5hbWUoc2VsZWN0b3IpOworICAgIHNpemVfdCBz
ZWxlY3Rvck5hbWVMZW5ndGggPSBzdHJsZW4oc2VsZWN0b3JOYW1lKTsKKyAgICBpZiAoc2VsZWN0
b3JOYW1lTGVuZ3RoIDwgMiB8fCBzZWxlY3Rvck5hbWVbc2VsZWN0b3JOYW1lTGVuZ3RoIC0gMV0g
IT0gJzonKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJuIFN0cmluZyhzZWxl
Y3Rvck5hbWUsIHNlbGVjdG9yTmFtZUxlbmd0aCAtIDEpOwogfQogCiAvLyBFZGl0aW5nIGNvbW1h
bmRzCisvLyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBoZXJlIGFsbCB0aGUgY29tbWFuZHMgYXMgd2Ug
aW1wbGVtZW50IHRoZW0uCiAKLS0gKHZvaWQpY29weTooaWQpc2VuZGVyCi17IAotICAgIF9kYXRh
LT5fcGFnZS0+Y29weSgpOwotfQorI2RlZmluZSBXRUJDT1JFX0NPTU1BTkQoY29tbWFuZCkgLSAo
dm9pZCljb21tYW5kOihpZClzZW5kZXIgeyBfZGF0YS0+X3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFu
ZChjb21tYW5kTmFtZUZvclNlbGVjdG9yKF9jbWQpKTsgfQogCi0tICh2b2lkKWN1dDooaWQpc2Vu
ZGVyCi17IAotICAgIF9kYXRhLT5fcGFnZS0+Y3V0KCk7Ci19CitXRUJDT1JFX0NPTU1BTkQoY29w
eSkKK1dFQkNPUkVfQ09NTUFORChjdXQpCitXRUJDT1JFX0NPTU1BTkQocGFzdGUpCitXRUJDT1JF
X0NPTU1BTkQoZGVsZXRlKQorV0VCQ09SRV9DT01NQU5EKHBhc3RlQXNQbGFpblRleHQpCitXRUJD
T1JFX0NPTU1BTkQoc2VsZWN0QWxsKQogCi0tICh2b2lkKXBhc3RlOihpZClzZW5kZXIKLXsgCi0g
ICAgX2RhdGEtPl9wYWdlLT5wYXN0ZSgpOwotfQorI3VuZGVmIFdFQkNPUkVfQ09NTUFORAogCi0t
ICh2b2lkKXNlbGVjdEFsbDooaWQpc2VuZGVyCisvLyBNZW51IGl0ZW1zIHZhbGlkYXRpb24KKwor
LSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtOihpZCA8TlNWYWxpZGF0ZWRVc2VySW50
ZXJmYWNlSXRlbT4paXRlbQogewotICAgIF9kYXRhLT5fcGFnZS0+c2VsZWN0QWxsKCk7CisgICAg
U3RyaW5nIGNvbW1hbmROYW1lID0gY29tbWFuZE5hbWVGb3JTZWxlY3RvcihbaXRlbSBhY3Rpb25d
KTsKKyAgICBOU01lbnVJdGVtICptZW51SXRlbSA9IChOU01lbnVJdGVtICopaXRlbTsKKyAgICBp
ZiAoIVttZW51SXRlbSBpc0tpbmRPZkNsYXNzOltOU01lbnVJdGVtIGNsYXNzXV0pCisgICAgICAg
IHJldHVybiBOTzsgICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBv
dGhlciB1c2VyIGludGVyZmFjZSBlbGVtZW50cy4KKyAgICAKKyAgICBSZXRhaW5QdHI8TlNNZW51
PiBtZW51ID0gW21lbnVJdGVtIG1lbnVdOworICAgIGlmIChfZGF0YS0+X25lZWRzRGF0YUZvclZh
bGlkYXRpb24pIHsKKyAgICAgICAgaWYgKF9kYXRhLT5fbWVudUxpc3QuZmluZChtZW51KSA9PSBu
b3RGb3VuZCkKKyAgICAgICAgICAgIF9kYXRhLT5fbWVudUxpc3QuYXBwZW5kKG1lbnUpOworICAg
ICAgICBfZGF0YS0+X21lbnVNYXAuYWRkKGNvbW1hbmROYW1lLCBNZW51SXRlbUluZm8oZmFsc2Us
IDApKTsKKyAgICAgICAgX2RhdGEtPl9tZW51RW50cmllc0NvdW50Kys7CisgICAgICAgIF9kYXRh
LT5fcGFnZS0+dmFsaWRhdGVNZW51SXRlbShjb21tYW5kTmFtZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgTWVudUl0ZW1JbmZvIGluZm8gPSBfZGF0YS0+X21lbnVNYXAudGFrZShjb21tYW5kTmFt
ZSk7CisgICAgICAgIFttZW51SXRlbSBzZXRTdGF0ZTppbmZvLl9zdGF0ZV07CisgICAgICAgIGlm
IChfZGF0YS0+X21lbnVNYXAuaXNFbXB0eSgpKQorICAgICAgICAgICAgX2RhdGEtPl9uZWVkc0Rh
dGFGb3JWYWxpZGF0aW9uID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGluZm8uX2lzRW5hYmxlZDsK
KyAgICB9CisKKyAgICByZXR1cm4gTk87CiB9CiAKIC8vIEV2ZW50cwpAQCAtNDE0LDYgKzQ4Mywy
MyBAQCAtICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICopY3Vyc29yCiAgICAgW2N1cnNvciBz
ZXRdOwogfQogCistICh2b2lkKV9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmluZyAq
KWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3RhdGUK
K3sKKyAgICBBU1NFUlQoX2RhdGEtPl9tZW51RW50cmllc0NvdW50KTsKKyAgICBfZGF0YS0+X21l
bnVNYXAuc2V0KGNvbW1hbmROYW1lLCBNZW51SXRlbUluZm8oaXNFbmFibGVkLCBuZXdTdGF0ZSkp
OworICAgIGlmICgtLV9kYXRhLT5fbWVudUVudHJpZXNDb3VudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIC8vIEFsbCB0aGUgbWVudSBlbnRyaWVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQuCisg
ICAgLy8gQ2FsbGluZyB1cGRhdGUgd2lsbCB0cmlnZ2VyIHRoZSB2YWxpZGF0aW9uCisgICAgLy8g
dG8gYmUgcGVyZm9ybWVkIHdpdGggdGhlIGFjcXVpcmVkIGRhdGEuCisgICAgX2RhdGEtPl9uZWVk
c0RhdGFGb3JWYWxpZGF0aW9uID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBf
ZGF0YS0+X21lbnVMaXN0LnNpemUoKTsgaSsrKQorICAgICAgICBbX2RhdGEtPl9tZW51TGlzdFtp
XS5nZXQoKSB1cGRhdGVdOworICAgIAorICAgIF9kYXRhLT5fbWVudUxpc3QuY2xlYXIoKTsKK30K
KwogLy8gQW55IG5vbi16ZXJvIHZhbHVlIHdpbGwgZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVj
b2duaXphYmxlIG1pZ2h0IGhlbHAgdXMgZGVidWcgc29tZSBkYXkuCiAjZGVmaW5lIFRSQUNLSU5H
X1JFQ1RfVEFHIDB4QkFERkFDRQogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlld0ludGVybmFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiA2ODMwNykKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvV0tWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBA
aW50ZXJmYWNlIFdLVmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV90YWtlRm9jdXM6KEJPT0wpZGly
ZWN0aW9uOwogLSAodm9pZClfdG9vbFRpcENoYW5nZWRGcm9tOihOU1N0cmluZyAqKW9sZFRvb2xU
aXAgdG86KE5TU3RyaW5nICopbmV3VG9vbFRpcDsKIC0gKHZvaWQpX3NldEN1cnNvcjooTlNDdXJz
b3IgKiljdXJzb3I7CistICh2b2lkKV9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmlu
ZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3Rh
dGU7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAtICh2b2lkKV9zdGFydEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmc6KENBTGF5ZXIgKilyb290TGF5ZXI7CkluZGV4OiBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gNjgzMDcpCisrKyBXZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDE0
ICsyMTgsMjIgQEAgU3RyaW5nIFdlYlBhZ2U6OnJlbmRlclRyZWVFeHRlcm5hbFJlcHJlcwogCiB2
b2lkIFdlYlBhZ2U6OmV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmRO
YW1lLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50KQogewotICAgIG1fbWFpbkZyYW1lLT5jb3JlRnJh
bWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpLmV4ZWN1dGUoYXJndW1lbnQpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1h
aW5GcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZS0+
ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpLmV4ZWN1dGUoYXJndW1lbnQpOwogfQogCiBi
b29sIFdlYlBhZ2U6OmlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKGNvbnN0IFN0cmluZyYgY29tbWFu
ZE5hbWUpCiB7Ci0gICAgcmV0dXJuIG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+ZWRpdG9yKCkt
PmNvbW1hbmQoY29tbWFuZE5hbWUpLmlzRW5hYmxlZCgpOworICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBFZGl0b3I6OkNvbW1hbmQg
Y29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZChjb21tYW5kTmFtZSk7CisgICAgcmV0
dXJuIGNvbW1hbmQuaXNTdXBwb3J0ZWQoKSAmJiBjb21tYW5kLmlzRW5hYmxlZCgpOwogfQotCisg
ICAgCiB2b2lkIFdlYlBhZ2U6OmNsZWFyTWFpbkZyYW1lTmFtZSgpCiB7CiAgICAgbWFpbkZyYW1l
KCktPmNvcmVGcmFtZSgpLT50cmVlKCktPmNsZWFyTmFtZSgpOwpAQCAtNTAyLDMwICs1MTAsMjUg
QEAgdm9pZCBXZWJQYWdlOjprZXlFdmVudChjb25zdCBXZWJLZXlib2FyZAogICAgICh2b2lkKWhh
bmRsZWQ7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2VsZWN0QWxsKCkKK3ZvaWQgV2ViUGFnZTo6dmFs
aWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lKQogewotICAgIGlmIChtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSkKLSAgICAgICAgbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPnNlbGVjdGlvbigp
LT5zZWxlY3RBbGwoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjpjb3B5KCkKLXsKLSAgICBpZiAobV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCi0gICAgICAgIG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+
Y29weSgpOworICAgIGJvb2wgaXNFbmFibGVkID0gZmFsc2U7CisgICAgaW50IHN0YXRlID0gMDsK
KyAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKKyAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgRWRpdG9yOjpDb21tYW5kIGNv
bW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoY29tbWFuZE5hbWUpOworICAgICAgICBz
dGF0ZSA9IGNvbW1hbmQuc3RhdGUoKTsKKyAgICAgICAgaXNFbmFibGVkID0gY29tbWFuZC5pc1N1
cHBvcnRlZCgpICYmIGNvbW1hbmQuaXNFbmFibGVkKCk7CisgICAgfQorICAgIAorICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJQYWdlUHJveHlNZXNzYWdlOjpE
aWRWYWxpZGF0ZU1lbnVJdGVtLCBtX3BhZ2VJRCwgQ29yZUlQQzo6SW4oY29tbWFuZE5hbWUsIGlz
RW5hYmxlZCwgc3RhdGUpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpjdXQoKQordm9pZCBXZWJQYWdl
OjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSkKIHsKLSAgICBp
ZiAobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCkpCi0gICAg
ICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0
b3IoKS0+Y3V0KCk7CisgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBTdHJp
bmcoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6cGFzdGUoKQotewotICAgIGlmIChtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKSkKLSAgICAgICAgbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5wYXN0ZSgp
OwotfSAgICAKLSAgICAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBXZWJQYWdlOjp0
b3VjaEV2ZW50KGNvbnN0IFdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQpCiB7CkluZGV4OiBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiA2ODMwNykKKysrIFdlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDEwICsx
OTAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgbW91c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50
Jik7CiAgICAgdm9pZCB3aGVlbEV2ZW50KGNvbnN0IFdlYldoZWVsRXZlbnQmKTsKICAgICB2b2lk
IGtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKTsKLSAgICB2b2lkIHNlbGVjdEFsbCgp
OwotICAgIHZvaWQgY29weSgpOwotICAgIHZvaWQgY3V0KCk7Ci0gICAgdm9pZCBwYXN0ZSgpOwor
ICAgIHZvaWQgdmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGV4ZWN1
dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
ICAgIHZvaWQgdG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50Jik7CiAjZW5kaWYKSW5kZXg6
IFdlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2
aXNpb24gNjgzMDcpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMCArNTcsOCBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIHsKICAgICBDbG9zZSgpCiAgICAgVHJ5Q2xvc2UoKQogCi0gICAgQ29weSgpCi0gICAgQ3V0
KCkKLSAgICBQYXN0ZSgpCi0gICAgU2VsZWN0QWxsKCkKKyAgICBWYWxpZGF0ZU1lbnVJdGVtKFdU
Rjo6U3RyaW5nIG5hbWUpCisgICAgRXhlY3V0ZUVkaXRDb21tYW5kKFdURjo6U3RyaW5nIG5hbWUp
CiAKICAgICBEaWRSZW1vdmVFZGl0Q29tbWFuZCh1aW50NjRfdCBjb21tYW5kSUQpCiAgICAgUmVh
cHBseUVkaXRDb21tYW5kKHVpbnQ2NF90IGNvbW1hbmRJRCkK
</data>
<flag name="review"
          id="58360"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>