<?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>103577</bug_id>
          
          <creation_ts>2012-11-28 16:55:16 -0800</creation_ts>
          <short_desc>TiledDrawingArea should recycle tiles</short_desc>
          <delta_ts>2012-11-29 12:35:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>koivisto</cc>
    
    <cc>msaboff</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>778496</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-28 16:55:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/12714586&gt;

We&apos;re creating/destroying too many CALayers when scrolling. We should recycle tiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778503</commentid>
    <comment_count>1</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-28 17:02:59 -0800</bug_when>
    <thetext>Adding msaboff since he added MemoryPressureHandler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778504</commentid>
    <comment_count>2</comment_count>
      <attachid>176606</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-28 17:03:21 -0800</bug_when>
    <thetext>Created attachment 176606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778514</commentid>
    <comment_count>3</comment_count>
      <attachid>176606</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-28 17:12:58 -0800</bug_when>
    <thetext>Comment on attachment 176606
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.h:43
&gt; +class TileLayerPool {

I don&apos;t think this should be &apos;TileLayerPool&apos; because we should use it for non-tile layers too. Just LayerPool should be fine.

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.h:55
&gt; +    unsigned decayedCapacity() const;

What does &apos;decayed&apos; mean?

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.h:74
&gt; +    unsigned m_totalBytes;
&gt; +    unsigned m_capacity;

Would be nice to name m_capacity to indicate what units it&apos;s in (bytes?)

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:72
&gt; +    IntSize layerSize([layer.get() frame].size);

Would be better to use the bounds size (frame is a synthetic property on CALayer).

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:76
&gt; +    MutexLocker locker(m_layerPoolMutex);

We don&apos;t need locking on desktop. You could #ifdef this PLATFORM(IOS)

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:103
&gt; +    return m_capacity / 4 + m_capacity * 3 / 4 * (1.f - decayProgess);

Don&apos;t need 1.f; just 1.

&gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:115
&gt; +    dispatch_time_t nextPruneTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
&gt; +    dispatch_after(nextPruneTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
&gt; +        prune();
&gt; +    });

Why isn&apos;t this just a Timer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778679</commentid>
    <comment_count>4</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-28 21:44:03 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 176606 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176606&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.h:43
&gt; &gt; +class TileLayerPool {
&gt; 
&gt; I don&apos;t think this should be &apos;TileLayerPool&apos; because we should use it for non-tile layers too. Just LayerPool should be fine.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.h:55
&gt; &gt; +    unsigned decayedCapacity() const;
&gt; 
&gt; What does &apos;decayed&apos; mean?
&gt; 

Good question. I don&apos;t have a great answer for this though. We should get Antti to weigh in. The goal in general is to shrink the LayerPool over time. If layers have been in there for a long time, then we want to get rid of some of them. So there is capacity and &quot;decayedCapacity.&quot; Capacity is the absolute maximum amount of space we want the layers to take up, and decayedCapacity is a lesser number that we will prune to with some regularity. 

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.h:74
&gt; &gt; +    unsigned m_totalBytes;
&gt; &gt; +    unsigned m_capacity;
&gt; 
&gt; Would be nice to name m_capacity to indicate what units it&apos;s in (bytes?)
&gt; 

I re-named this to m_maxBytesForPool. I&apos;m open to other suggestions too.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:72
&gt; &gt; +    IntSize layerSize([layer.get() frame].size);
&gt; 
&gt; Would be better to use the bounds size (frame is a synthetic property on CALayer).
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:76
&gt; &gt; +    MutexLocker locker(m_layerPoolMutex);
&gt; 
&gt; We don&apos;t need locking on desktop. You could #ifdef this PLATFORM(IOS)
&gt; 

I removed this.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:103
&gt; &gt; +    return m_capacity / 4 + m_capacity * 3 / 4 * (1.f - decayProgess);
&gt; 
&gt; Don&apos;t need 1.f; just 1.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileLayerPool.mm:115
&gt; &gt; +    dispatch_time_t nextPruneTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
&gt; &gt; +    dispatch_after(nextPruneTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
&gt; &gt; +        prune();
&gt; &gt; +    });
&gt; 
&gt; Why isn&apos;t this just a Timer?

It is now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778680</commentid>
    <comment_count>5</comment_count>
      <attachid>176646</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-28 21:44:23 -0800</bug_when>
    <thetext>Created attachment 176646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>778685</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 21:49:31 -0800</bug_when>
    <thetext>Attachment 176646 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/ca/mac/LayerPool.h:66:  The parameter name &quot;accessType&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/mac/LayerPool.h:68:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/ca/mac/LayerPool.h:71:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 3 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779263</commentid>
    <comment_count>7</comment_count>
      <attachid>176772</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-29 11:50:14 -0800</bug_when>
    <thetext>Created attachment 176772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779276</commentid>
    <comment_count>8</comment_count>
      <attachid>176772</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-29 11:59:56 -0800</bug_when>
    <thetext>Comment on attachment 176772
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/LayerPool.h:48
&gt; +    void addLayer(const RetainPtr&lt;WebTileLayer&gt;&amp;);
&gt; +    RetainPtr&lt;WebTileLayer&gt; takeLayerWithSize(const IntSize&amp;);

Crap, now I realize that we use a special CALayer subclass for tiles. So maybe this is a TiledLayerPool! But LayerPool is OK for now.

Or I wonder if we could avoid using a subclass and make WebLayer more dynamic.

&gt; Source/WebCore/platform/graphics/ca/mac/LayerPool.h:54
&gt; +    unsigned decayedCapacity() const;

Why is this public?

&gt; Source/WebCore/platform/graphics/ca/mac/LayerPool.h:68
&gt; +    static unsigned bytesBackingLayerWithPixelSize(const IntSize&amp;);

Awkward name. Maybe backingStoreBytesForSize()?

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:491
&gt; +    RetainPtr&lt;WebTileLayer&gt; layer = LayerPool::sharedPool()-&gt;takeLayerWithSize(tileRect.size());

If you get a layer from the pool I think you should -setNeedsDisplay:YES on it to avoid stale content.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>779331</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-11-29 12:35:55 -0800</bug_when>
    <thetext>Thanks, Simon! I addressed your remaining comments. http://trac.webkit.org/changeset/136151</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176606</attachid>
            <date>2012-11-28 17:03:21 -0800</date>
            <delta_ts>2012-11-28 21:44:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>17402</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjA3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTc3CisgICAgICAgIFRpbGVkRHJhd2luZ0FyZWEgc2hvdWxk
IHJlY3ljbGUgdGlsZXMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTI3MTQ1ODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTmV3IGNsYXNzIFRpbGVMYXllclBvb2wgd2lsbCBrZWVwIGEgbGlzdCBv
ZiBsYXllcnMgdG8gcmV1c2Ugc28gdGhhdCAKKyAgICAgICAgd2UgY2FuIGF2b2lkIGNyZWF0aW5n
IGFuZCBkZXN0cm95aW5nIHNvIG1hbnkgbGF5ZXIuCisKKyAgICAgICAgV2hlbiByZW1vdmluZyBs
YXllcnMsIGFkZCB0aGVtIHRvIHRoZSBUaWxlTGF5ZXJQb29sCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNo
ZTo6cmV2YWxpZGF0ZVRpbGVzKToKKworICAgICAgICBCZWZvcmUgY3JlYXRpbmcgYSBuZXcgbGF5
ZXIsIHRyeSB0byBnZXQgb25lIG9mIHRoZSBhcHByb3ByaWF0ZSBzaXplIAorICAgICAgICBmcm9t
IHRoZSBUaWxlTGF5ZXJQb29sLgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpjcmVhdGVU
aWxlTGF5ZXIpOgorCisgICAgICAgIE5ldyBjbGFzcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1RpbGVMYXllclBvb2wuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFRp
bGVMYXllclBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6Y2FwYWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6Y2FuUmV1c2VMYXllcldpdGhTaXpl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUxheWVyUG9vbC5tbTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVMYXllclBv
b2w6OlRpbGVMYXllclBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6c2hh
cmVkUG9vbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdM
YXllcldpdGhQaXhlbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6bGlz
dE9mTGF5ZXJzV2l0aFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6YWRk
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6dGFrZUxheWVyV2l0aFNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6ZGVjYXllZENhcGFjaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OlRpbGVMYXllclBvb2w6OnNjaGVkdWxlUHJ1bmUpOgorICAgICAg
ICAoV2ViQ29yZTo6VGlsZUxheWVyUG9vbDo6cHJ1bmUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUxheWVyUG9vbDo6ZHJhaW4pOgorCisgICAgICAgIElmIHdlJ3JlIHVuZGVyIG1lbW9yeSBwcmVz
c3VyZSwgZHJhaW4gdGhlIFRpbGVMYXllclBvb2wKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTWVt
b3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpyZWxlYXNlTWVtb3J5KToKKwogMjAxMi0xMS0yOCAgSGFqaW1lIE1vcnJpdGEg
IDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgY2hlY2tBY2NlcHRDaGlsZCgpIG5lZWRz
IGZld2VyIHZpcnR1YWwgY2FsbHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzNTkzNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzE5Niw2ICszMTk2LDggQEAKIAkJOTMyNkRDMEMwOURBRDVENjAwQUZDODQ3IC8qIENoYXJz
ZXREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAgKi87IH07CiAJCTkz
MjdBOTQyMDk5NjhEMUEwMDY4QTU0NiAvKiBIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyN0E5NDEwOTk2OEQx
QTAwNjhBNTQ2IC8qIEhUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAgKi87IH07CiAJCTkzMjg3MUMw
MEIyMERFQjcwMDQ5MDM1QSAvKiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyODcxQkYwQjIwREVCNzAwNDkw
MzVBIC8qIFBsYXRmb3JtTWVudURlc2NyaXB0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTMyOTFBMEYxNjY1OTkyRjAwODJDMUIzIC8qIFRp
bGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzMjkxQTBFMTY2NTk5MkYwMDgyQzFCMyAvKiBUaWxlTGF5ZXJQb29sLmggKi87IH07CisJ
CTkzMjkxQTExMTY2NTk5NTMwMDgyQzFCMyAvKiBUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyOTFBMTAxNjY1OTk1MzAwODJD
MUIzIC8qIFRpbGVMYXllclBvb2wubW0gKi87IH07CiAJCTkzMkUxNjA5MEFGNTc4MzQwMDI1RjQw
OCAvKiBGcmFtZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzJFMTYwODBBRjU3ODM0MDAyNUY0MDggLyogRnJhbWVMb2FkZXIuY3BwICov
OyB9OwogCQk5MzMwOURENjA5OUU2NDkyMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMzMDlEODcw
OTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmNwcCAqLzsgfTsKIAkJOTMzMDlE
RDcwOTlFNjQ5MjAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzMwOUQ4ODA5OUU2NDkxMDA1NkU1ODEg
LyogQXBwZW5kTm9kZUNvbW1hbmQuaCAqLzsgfTsKQEAgLTEwNDQ5LDYgKzEwNDUxLDggQEAKIAkJ
OTMxRDcyRjUxNUZFNjk1MzAwQzRDMDdFIC8qIExheW91dE1pbGVzdG9uZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0TWlsZXN0b25lcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzI3QTk0MTA5OTY4RDFBMDA2OEE1NDYgLyogSFRNTE9wdGlvbnND
b2xsZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxP
cHRpb25zQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMjg3
MUJGMEIyMERFQjcwMDQ5MDM1QSAvKiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1NZW51RGVzY3JpcHRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMyOTFBMEUxNjY1OTkyRjAwODJDMUIzIC8qIFRp
bGVMYXllclBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGlsZUxheWVy
UG9vbC5oOyBwYXRoID0gY2EvbWFjL1RpbGVMYXllclBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTMyOTFBMTAxNjY1OTk1MzAwODJDMUIzIC8qIFRpbGVMYXllclBvb2wubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlTGF5ZXJQb29sLm1t
OyBwYXRoID0gY2EvbWFjL1RpbGVMYXllclBvb2wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTkzMkUxNjA4MEFGNTc4MzQwMDI1RjQwOCAvKiBGcmFtZUxvYWRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGcmFtZUxvYWRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5RDg3MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmRO
b2RlQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBl
bmROb2RlQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5RDg4
MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBlbmROb2RlQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBcHBlbmROb2RlQ29tbWFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTUzODYsNiArMTUzOTAsOCBAQAogCQkJCTQ5NTg3ODIwMTJBNTdEREYwMDcy
MzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gKi8sCiAJCQkJMUFBNzE2MDkxNDlCQzREQjAw
MTZFQzE5IC8qIFRpbGVDYWNoZS5oICovLAogCQkJCTFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAv
KiBUaWxlQ2FjaGUubW0gKi8sCisJCQkJOTMyOTFBMEUxNjY1OTkyRjAwODJDMUIzIC8qIFRpbGVM
YXllclBvb2wuaCAqLywKKwkJCQk5MzI5MUExMDE2NjU5OTUzMDA4MkMxQjMgLyogVGlsZUxheWVy
UG9vbC5tbSAqLywKIAkJCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZUNhY2hl
TGF5ZXIuaCAqLywKIAkJCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZUNhY2hl
TGF5ZXIubW0gKi8sCiAJCQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXll
ci5oICovLApAQCAtMjU4MTksNiArMjU4MjUsNyBAQAogCQkJCUZCMkMxNUMzMTY1RDY0OUQwMDM5
QzlGOCAvKiBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTVCOEI3QzkxNjUyQzUyMjAwMzZFRjU1IC8qIEpTV2ViS2l0Q1NTTWl4
RnVuY3Rpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTMyOTFBMEYxNjY1OTkyRjAwODJD
MUIzIC8qIFRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjg5MTksNiArMjg5MjYs
NyBAQAogCQkJCUNEN0UwNTIyMTY1MUMyODIwMEMxMjAxRiAvKiBXZWJDb3JlQVZGUmVzb3VyY2VM
b2FkZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQk0NDc5NTgwNTE2NDNCNEIyMDAxRTBBN0YgLyog
UGFyc2VkQ29udGVudFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTVCOEI3QzgxNjUyQzUy
MjAwMzZFRjU1IC8qIEpTV2ViS2l0Q1NTTWl4RnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5MzI5MUExMTE2NjU5OTUzMDA4MkMxQjMgLyogVGlsZUxheWVyUG9vbC5tbSBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1RpbGVDYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCShyZXZpc2lvbiAxMzU5MzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bUNBTGF5ZXIuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgorI2ltcG9ydCAiVGlsZUxheWVyUG9vbC5o
IgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVDYWNoZUxheWVyLmgiCiAj
aW1wb3J0ICJXZWJUaWxlTGF5ZXIuaCIKQEAgLTQxOSw3ICs0MjAsNyBAQCB2b2lkIFRpbGVDYWNo
ZTo6cmV2YWxpZGF0ZVRpbGVzKCkKICAgICAvLyB0aGUgdGlsZXMgdGhhdCBhcmUgb3V0c2lkZSB0
aGUgY292ZXJhZ2UgcmVjdC4gV2hlbiB3ZSBrbm93IHRoYXQgd2UncmUgZ29pbmcgdG8gYmUgc2Ny
b2xsaW5nIHVwLAogICAgIC8vIHdlIG1pZ2h0IHdhbnQgdG8gcmVtb3ZlIHRoZSBvbmVzIGJlbG93
IHRoZSBjb3ZlcmFnZSByZWN0IGJ1dCBrZWVwIHRoZSBvbmVzIGFib3ZlLgogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkKLSAgICAgICAgbV90aWxl
cy5yZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7CisgICAgICAgIFRpbGVMYXllclBvb2w6OnNoYXJl
ZFBvb2woKS0+YWRkTGF5ZXIobV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pKTsKIAogICAg
IFRpbGVJbmRleCB0b3BMZWZ0OwogICAgIFRpbGVJbmRleCBib3R0b21SaWdodDsKQEAgLTQ4Nyw3
ICs0ODgsOSBAQCBXZWJUaWxlTGF5ZXIqIFRpbGVDYWNoZTo6dGlsZUxheWVyQXRJbmRlCiAKIFJl
dGFpblB0cjxXZWJUaWxlTGF5ZXI+IFRpbGVDYWNoZTo6Y3JlYXRlVGlsZUxheWVyKGNvbnN0IElu
dFJlY3QmIHRpbGVSZWN0KQogewotICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IGxheWVyID0g
YWRvcHROUyhbW1dlYlRpbGVMYXllciBhbGxvY10gaW5pdF0pOworICAgIFJldGFpblB0cjxXZWJU
aWxlTGF5ZXI+IGxheWVyID0gVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJX
aXRoU2l6ZSh0aWxlUmVjdC5zaXplKCkpOworICAgIGlmICghbGF5ZXIpCisgICAgICAgIGxheWVy
ID0gYWRvcHROUyhbW1dlYlRpbGVMYXllciBhbGxvY10gaW5pdF0pOwogICAgIFtsYXllci5nZXQo
KSBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107CiAgICAgW2xheWVyLmdldCgpIHNldEZyYW1l
OnRpbGVSZWN0XTsKICAgICBbbGF5ZXIuZ2V0KCkgc2V0VGlsZUNhY2hlOnRoaXNdOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVMYXllclBvb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGls
ZUxheWVyUG9vbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1RpbGVMYXllclBvb2wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgVGlsZUxheWVyUG9vbF9oCisjZGVmaW5lIFRpbGVMYXll
clBvb2xfaAorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkludFNpemVIYXNoLmgi
CisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworQGNsYXNzIFdlYlRpbGVMYXllcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorY2xhc3MgVGlsZUxheWVyUG9vbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUxh
eWVyUG9vbCk7CitwdWJsaWM6CisgICAgc3RhdGljIFRpbGVMYXllclBvb2wqIHNoYXJlZFBvb2wo
KTsKKyAgICAKKyAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+
Jik7CisgICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gdGFrZUxheWVyV2l0aFNpemUoY29uc3Qg
SW50U2l6ZSYpOworCisgICAgdm9pZCBkcmFpbigpOworCisgICAgLy8gVGhlIG1heGltdW0gc2l6
ZSBvZiBhbGwgcXVldWVkIGxheWVycyBpbiBieXRlcy4KKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KKyAgICB1bnNpZ25lZCBkZWNheWVkQ2FwYWNp
dHkoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBUaWxlTGF5ZXJQb29sKCk7CisgICAgCisgICAg
dHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiA+IExheWVyTGlzdDsKKyAgICAK
KyAgICBib29sIGNhblJldXNlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25z
dCB7IHJldHVybiBtX2NhcGFjaXR5ICYmICFzaXplLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgc2No
ZWR1bGVQcnVuZSgpOworICAgIHZvaWQgcHJ1bmUoKTsKKyAgICB0eXBlZGVmIGVudW0geyBMZWF2
ZVVuY2hhbmdlZCwgTWFya0FzVXNlZCB9IEFjY2Vzc1R5cGU7CisgICAgTGF5ZXJMaXN0JiBsaXN0
T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXplJiwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0g
TGVhdmVVbmNoYW5nZWQpOworCisgICAgc3RhdGljIHVuc2lnbmVkIGJ5dGVzQmFja2luZ0xheWVy
V2l0aFBpeGVsU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKTsKKworICAgIEhhc2hNYXA8SW50U2l6
ZSwgTGF5ZXJMaXN0PiBtX3JldXNlTGlzdHM7CisgICAgLy8gT3JkZXJlZCBieSByZWNlbnQgdXNl
LiAgVGhlIGxhc3Qgc2l6ZSBpcyB0aGUgbW9zdCByZWNlbnRseSB1c2VkLgorICAgIFZlY3RvcjxJ
bnRTaXplPiBtX3NpemVzSW5QcnVuZU9yZGVyOworICAgIHVuc2lnbmVkIG1fdG90YWxCeXRlczsK
KyAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OworICAgIE11dGV4IG1fbGF5ZXJQb29sTXV0ZXg7Cisg
ICAgCisgICAgZG91YmxlIG1fbGFzdEFkZFRpbWU7CisgICAgYm9vbCBtX25lZWRzUHJ1bmU7Cit9
OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVMYXllclBvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVMYXllclBvb2wubW0JKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUxheWVyUG9vbC5tbQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUaWxlTGF5ZXJQb29sLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
V2ViVGlsZUxheWVyLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK3N0YXRpYyBjb25zdCBkb3VibGUgY2FwYWNpdHlEZWNheVRpbWUg
PSA1OworICAgIAorVGlsZUxheWVyUG9vbDo6VGlsZUxheWVyUG9vbCgpCisgICAgOiBtX3RvdGFs
Qnl0ZXMoMCkKKyAgICAsIG1fY2FwYWNpdHkoNDggKiAxMDI0ICogMTAyNCkKKyAgICAsIG1fbGFz
dEFkZFRpbWUoMCkKKyAgICAsIG1fbmVlZHNQcnVuZShmYWxzZSkKK3sKK30KKworVGlsZUxheWVy
UG9vbCogVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpCit7CisgICAgc3RhdGljIFRpbGVMYXll
clBvb2wqIHNoYXJlZFBvb2wgPSBuZXcgVGlsZUxheWVyUG9vbDsKKyAgICByZXR1cm4gc2hhcmVk
UG9vbDsKK30KKwordW5zaWduZWQgVGlsZUxheWVyUG9vbDo6Ynl0ZXNCYWNraW5nTGF5ZXJXaXRo
UGl4ZWxTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIHNpemUud2lkdGgo
KSAqIHNpemUuaGVpZ2h0KCkgKiA0OworfQorCitUaWxlTGF5ZXJQb29sOjpMYXllckxpc3QmIFRp
bGVMYXllclBvb2w6Omxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSkKK3sKKyAgICBBU1NFUlQoIW1fbGF5ZXJQb29sTXV0ZXgudHJ5
TG9jaygpKTsKKyAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46Oml0ZXJhdG9yIGl0ID0g
bV9yZXVzZUxpc3RzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0ID09IG1fcmV1c2VMaXN0cy5lbmQo
KSkgeworICAgICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQoc2l6ZSwgTGF5ZXJMaXN0KCkpLml0
ZXJhdG9yOworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKKyAgICB9
IGVsc2UgaWYgKGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkgeworICAgICAgICBtX3NpemVzSW5Q
cnVuZU9yZGVyLnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVyLnJldmVyc2VGaW5kKHNpemUpKTsK
KyAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQoc2l6ZSk7CisgICAgfQorICAgIHJl
dHVybiBpdC0+dmFsdWU7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6YWRkTGF5ZXIoY29uc3Qg
UmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIGxheWVyKQoreworICAgIEludFNpemUgbGF5ZXJTaXpl
KFtsYXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNp
emUobGF5ZXJTaXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIGxpc3RPZkxheWVyc1dpdGhTaXplKGxheWVyU2l6ZSku
cHJlcGVuZChsYXllcik7CisgICAgbV90b3RhbEJ5dGVzICs9IGJ5dGVzQmFja2luZ0xheWVyV2l0
aFBpeGVsU2l6ZShsYXllclNpemUpOworICAgIAorICAgIG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50
VGltZSgpOworICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKworUmV0YWluUHRyPFdlYlRpbGVMYXll
cj4gVGlsZUxheWVyUG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShzaXplKSkKKyAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgTGF5
ZXJMaXN0JiByZXVzZUxpc3QgPSBsaXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2Vk
KTsKKyAgICBpZiAocmV1c2VMaXN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICBtX3RvdGFsQnl0ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemUpOwor
ICAgIHJldHVybiByZXVzZUxpc3QudGFrZUZpcnN0KCk7Cit9CisgICAgCit1bnNpZ25lZCBUaWxl
TGF5ZXJQb29sOjpkZWNheWVkQ2FwYWNpdHkoKSBjb25zdAoreworICAgIC8vIERlY2F5IHRvIG9u
ZSBxdWFydGVyIG92ZXIgY2FwYWNpdHlEZWNheVRpbWUKKyAgICBkb3VibGUgdGltZVNpbmNlTGFz
dEFkZCA9IGN1cnJlbnRUaW1lKCkgLSBtX2xhc3RBZGRUaW1lOworICAgIGlmICh0aW1lU2luY2VM
YXN0QWRkID4gY2FwYWNpdHlEZWNheVRpbWUpCisgICAgICAgIHJldHVybiBtX2NhcGFjaXR5IC8g
NDsKKyAgICBmbG9hdCBkZWNheVByb2dlc3MgPSBmbG9hdCh0aW1lU2luY2VMYXN0QWRkIC8gY2Fw
YWNpdHlEZWNheVRpbWUpOworICAgIHJldHVybiBtX2NhcGFjaXR5IC8gNCArIG1fY2FwYWNpdHkg
KiAzIC8gNCAqICgxLmYgLSBkZWNheVByb2dlc3MpOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6
OnNjaGVkdWxlUHJ1bmUoKQoreworICAgIEFTU0VSVCghbV9sYXllclBvb2xNdXRleC50cnlMb2Nr
KCkpOworICAgIGlmIChtX25lZWRzUHJ1bmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX25lZWRz
UHJ1bmUgPSB0cnVlOworICAgIGRpc3BhdGNoX3RpbWVfdCBuZXh0UHJ1bmVUaW1lID0gZGlzcGF0
Y2hfdGltZShESVNQQVRDSF9USU1FX05PVywgMSAqIE5TRUNfUEVSX1NFQyk7CisgICAgZGlzcGF0
Y2hfYWZ0ZXIobmV4dFBydW5lVGltZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRD
SF9RVUVVRV9QUklPUklUWV9ERUZBVUxULCAwKSwgXnsKKyAgICAgICAgcHJ1bmUoKTsKKyAgICB9
KTsKK30KKwordm9pZCBUaWxlTGF5ZXJQb29sOjpwcnVuZSgpCit7CisgICAgTXV0ZXhMb2NrZXIg
bG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIEFTU0VSVChtX25lZWRzUHJ1bmUpOworICAg
IG1fbmVlZHNQcnVuZSA9IGZhbHNlOworICAgIHVuc2lnbmVkIHNocmlua1RvID0gZGVjYXllZENh
cGFjaXR5KCk7CisgICAgd2hpbGUgKG1fdG90YWxCeXRlcyA+IHNocmlua1RvKSB7CisgICAgICAg
IEFTU0VSVCghbV9zaXplc0luUHJ1bmVPcmRlci5pc0VtcHR5KCkpOworICAgICAgICBJbnRTaXpl
IHNpemVUb0Ryb3AgPSBtX3NpemVzSW5QcnVuZU9yZGVyLmZpcnN0KCk7CisgICAgICAgIExheWVy
TGlzdCYgb2xkZXN0UmV1c2VMaXN0ID0gbV9yZXVzZUxpc3RzLmZpbmQoc2l6ZVRvRHJvcCktPnZh
bHVlOworICAgICAgICBpZiAob2xkZXN0UmV1c2VMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgbV9yZXVzZUxpc3RzLnJlbW92ZShzaXplVG9Ecm9wKTsKKyAgICAgICAgICAgIG1fc2l6ZXNJ
blBydW5lT3JkZXIucmVtb3ZlKDApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBtX3RvdGFsQnl0ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXpl
KHNpemVUb0Ryb3ApOworICAgICAgICAvLyBUaGUgbGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IGlz
IHRoZSBvbGRlc3QsIGhlbmNlIG1vc3QgbGlrZWx5IG5vdCB0bworICAgICAgICAvLyBzdGlsbCBo
YXZlIGEgYmFja2luZyBzdG9yZS4KKyAgICAgICAgb2xkZXN0UmV1c2VMaXN0LnJlbW92ZSgtLW9s
ZGVzdFJldXNlTGlzdC5lbmQoKSk7CisgICAgfQorICAgIGlmIChjdXJyZW50VGltZSgpIC0gbV9s
YXN0QWRkVGltZSA8PSBjYXBhY2l0eURlY2F5VGltZSkKKyAgICAgICAgc2NoZWR1bGVQcnVuZSgp
OworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OmRyYWluKCkKK3sKKyAgICBNdXRleExvY2tlciBy
ZXVzZUxvY2tlcihtX2xheWVyUG9vbE11dGV4KTsKKyAgICBtX3JldXNlTGlzdHMuY2xlYXIoKTsK
KyAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmNsZWFyKCk7CisgICAgbV90b3RhbEJ5dGVzID0gMDsK
K30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJl
SGFuZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
TWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAxMzU5MzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ2Fj
aGUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVGlsZUxheWVyUG9vbC5oPgogI2ltcG9ydCA8d3RmL0N1
cnJlbnRUaW1lLmg+CiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogCkBAIC0xNDgsNiArMTQ5
LDggQEAgdm9pZCBNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcgogCiAgICAgbWVt
b3J5Q2FjaGUoKS0+cHJ1bmVUb1BlcmNlbnRhZ2UoY3JpdGljYWwgPyAwIDogMC41Zik7CiAKKyAg
ICBUaWxlTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmRyYWluKCk7CisKICAgICBnY0NvbnRyb2xs
ZXIoKS5kaXNjYXJkQWxsQ29tcGlsZWRDb2RlKCk7CiAKICAgICBXVEY6OnJlbGVhc2VGYXN0TWFs
bG9jRnJlZU1lbW9yeSgpOwo=
</data>
<flag name="review"
          id="192448"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176646</attachid>
            <date>2012-11-28 21:44:23 -0800</date>
            <delta_ts>2012-11-29 11:50:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>21549</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjA3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI4ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTc3CisgICAgICAgIFRpbGVkRHJhd2luZ0FyZWEgc2hvdWxk
IHJlY3ljbGUgdGlsZXMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTI3MTQ1ODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTmV3IGNsYXNzIExheWVyUG9vbCB3aWxsIGtlZXAgYSBsaXN0IG9mIGxh
eWVycyB0byByZXVzZSBzbyB0aGF0IAorICAgICAgICB3ZSBjYW4gYXZvaWQgY3JlYXRpbmcgYW5k
IGRlc3Ryb3lpbmcgc28gbWFueSBsYXllci4KKworICAgICAgICBXaGVuIHJlbW92aW5nIGxheWVy
cywgYWRkIHRoZW0gdG8gdGhlIExheWVyUG9vbAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9UaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnJldmFs
aWRhdGVUaWxlcyk6CisKKyAgICAgICAgQmVmb3JlIGNyZWF0aW5nIGEgbmV3IGxheWVyLCB0cnkg
dG8gZ2V0IG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZSAKKyAgICAgICAgZnJvbSB0aGUgTGF5
ZXJQb29sLgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpjcmVhdGVUaWxlTGF5ZXIpOgor
CisgICAgICAgIE5ldyBjbGFzcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJQb29sKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6Y2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJQb29sOjpjYW5SZXVzZUxheWVyV2l0aFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllclBvb2wubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclBvb2w6OiBMYXllclBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJQb29sOjpzaGFyZWRQb29sKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6Ynl0
ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9v
bDo6bGlzdE9mTGF5ZXJzV2l0aFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJQb29sOjph
ZGRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6ZGVjYXllZENhcGFjaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6c2NoZWR1bGVQcnVuZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclBvb2w6OnBydW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6ZHJhaW4p
OgorCisgICAgICAgIElmIHdlJ3JlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgZHJhaW4gdGhlIExh
eWVyUG9vbAorICAgICAgICAqIHBsYXRmb3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1v
cnkpOgorCiAyMDEyLTExLTI4ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBjaGVja0FjY2VwdENoaWxkKCkgbmVlZHMgZmV3ZXIgdmlydHVhbCBjYWxscwpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTM2MDc3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMwLDYgKzM0MzAsOCBAQAog
CQk5M0YxRDVDMTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0YxRDVCRjEyRDUzMzU2
MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggKi87IH07CiAJCTkzRjZGMUVEMTI3Rjcw
QjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFFQTEyN0Y3MEIxMDA1NUNCMDYgLyogV2Vi
R0xDb250ZXh0RXZlbnQuY3BwICovOyB9OwogCQk5M0Y2RjFFRTEyN0Y3MEIxMDA1NUNCMDYgLyog
V2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDkzRjZGMUVCMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5o
ICovOyB9OworCQk5M0Y3MkFGMzE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29sLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y3MkFGMTE2NjZFREZD
MDAyQTAyQkQgLyogTGF5ZXJQb29sLmggKi87IH07CisJCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJC
RCAvKiBMYXllclBvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA5M0Y3MkFGMjE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29sLm1tICovOyB9Owog
CQk5M0Y5MjU0MzBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNGOTI1NDEwRjdFRjVC
ODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Y5MjU0NDBGN0VGNUI4MDA3RTM3QzkgLyog
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0Y5MjU0MjBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0
dG9ucy5jcHAgKi87IH07CiAJCTkzRjlCNjU3MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2Fu
dmFzRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRjlCNjU0MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSAq
LzsgfTsKQEAgLTU5MjgsMTAgKzU5MzAsMTAgQEAKIAkJQ0RCODU5RjcxNjBENDhBNDAwRTVCMDdG
IC8qIE1lZGlhS2V5RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQ0RCODU5RjQxNjBENDg5OTAwRTVCMDdGIC8qIE1lZGlhS2V5RXZlbnQuY3Bw
ICovOyB9OwogCQlDREI4NTlGQTE2MEQ0OTQ5MDBFNUIwN0YgLyogSlNNZWRpYUtleUV2ZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQjg1OUY4
MTYwRDQ5M0UwMEU1QjA3RiAvKiBKU01lZGlhS2V5RXZlbnQuY3BwICovOyB9OwogCQlDREI4NTlG
QjE2MEQ0OTRGMDBFNUIwN0YgLyogSlNNZWRpYUtleUVycm9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQjg1OUYwMTYwRDQyREQwMEU1QjA3RiAv
KiBKU01lZGlhS2V5RXJyb3IuY3BwICovOyB9OwotCQlDREM2OUREQTE2MzcxRkQ0MDA3QzM4REYg
LyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ4MTYzNzFGRDMwMDdDMzhERiAvKiBX
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQzY5RERCMTYzNzFGRDQwMDdDMzhERiAvKiBX
ZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ5MTYzNzFGRDMwMDdDMzhERiAvKiBXZWJD
b3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLzsgfTsKIAkJQ0RDNjlERDYxNjMyMDI2
QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ0MTYzMjAyNkMwMDdDMzhE
RiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RDNjlERDcxNjMyMDI2QzAwN0MzOERGIC8q
IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIwMjZDMDA3QzM4REYgLyogV2ViQ29y
ZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKKwkJQ0RDNjlEREExNjM3MUZENDAwN0Mz
OERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREODE2MzcxRkQzMDA3QzM4REYg
LyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREM2OUREQjE2MzcxRkQ0MDA3QzM4REYg
LyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREOTE2MzcxRkQzMDA3QzM4REYgLyog
V2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi87IH07CiAJCUNERDUyNUQ3MTQ1
QjZERDAwMDhEMjA0RCAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNjVDQ0MxNDVCNkFGRTAwQzRD
N0FBIC8qIEpTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCUNERUE3NjMwMTQ2
MDhBNTMwMDhCMzFGMSAvKiBQbGF0Zm9ybUNsb2NrQ0EuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFQTc2MkUxNDYwODRERTAwOEIzMUYxIC8qIFBs
YXRmb3JtQ2xvY2tDQS5jcHAgKi87IH07CiAJCUNERUE3NjM0MTQ2MEI1NkYwMDhCMzFGMSAvKiBD
bG9ja0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQ0RFQTc2MzIxNDYwQUUyOTAwOEIzMUYxIC8qIENsb2NrR2VuZXJpYy5jcHAgKi87IH07
CkBAIC0xMDY4NCw2ICsxMDY4Niw4IEBACiAJCTkzRjZGMUVBMTI3RjcwQjEwMDU1Q0IwNiAvKiBX
ZWJHTENvbnRleHRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBXZWJHTENvbnRleHRFdmVudC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xDb250ZXh0RXZlbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y2RjFFQjEyN0Y3MEIxMDA1NUNC
MDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV2ViR0xDb250ZXh0RXZlbnQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y2RjFFQzEyN0Y3MEIxMDA1NUNCMDYg
LyogV2ViR0xDb250ZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQ29u
dGV4dEV2ZW50LmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRFdmVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjcyQUYxMTY2NkVERkMwMDJBMDJCRCAvKiBMYXll
clBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGF5ZXJQb29sLmg7IHBh
dGggPSBjYS9tYWMvTGF5ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
RjcyQUYyMTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBMYXllclBvb2wubW07IHBhdGggPSBjYS9tYWMvTGF5ZXJQ
b29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNTBBMzAwRkUxMDBG
NjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnBlcmw7IG5h
bWUgPSBDb2RlR2VuZXJhdG9yLnBtOyBwYXRoID0gc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNjBBMzAwRkVBMDBGNjFBQjggLyog
Q29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENv
ZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB3cmFwc0xpbmVzID0gMDsgfTsKIAkJOTNGOEIzMDcwQTMw
MEZFQTAwRjYxQUI4IC8qIGdlbmVyYXRlLWJpbmRpbmdzLnBsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3Jp
cHQucGVybDsgbmFtZSA9ICJnZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHBhdGggPSAic2NyaXB0cy9n
ZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzM1
NiwxMCArMTMzNjAsMTAgQEAKIAkJQ0RCODU5RjgxNjBENDkzRTAwRTVCMDdGIC8qIEpTTWVkaWFL
ZXlFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU01lZGlh
S2V5RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREI4NTlGOTE2MEQ0
OTNFMDBFNUIwN0YgLyogSlNNZWRpYUtleUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTTWVkaWFLZXlFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREJEOTNCQTEzMzNCRDRCMDAyNTcwRTMgLyogZnVsbHNjcmVlblF1aWNrVGltZS5jc3MgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGZ1bGxzY3JlZW5RdWlja1RpbWUuY3NzOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDREM2OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29y
ZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQ0RDNjlERDkxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2Ny
ZWVuUGxhY2Vob2xkZXJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQzY5REQ0MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNj
cmVlbldhcm5pbmdWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNv
cmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RDNjlERDUxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb3JlRnVsbFNj
cmVlbldhcm5pbmdWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDREM2OURE
ODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDNjlERDkxNjM3MUZE
MzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhv
bGRlclZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNC
QzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
REVBNzYyQzE0NjA4MjI0MDA4QjMxRjEgLyogQ2xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RFQTc2
MkUxNDYwODRERTAwOEIzMUYxIC8qIFBsYXRmb3JtQ2xvY2tDQS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybUNsb2NrQ0EuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTUzOTYsNiArMTU0MDAsOCBAQAogCQkJCTQ5NTg3ODIwMTJBNTdE
REYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gKi8sCiAJCQkJMUFBNzE2MDkxNDlC
QzREQjAwMTZFQzE5IC8qIFRpbGVDYWNoZS5oICovLAogCQkJCTFBQTcxNjA4MTQ5QkM0REEwMDE2
RUMxOSAvKiBUaWxlQ2FjaGUubW0gKi8sCisJCQkJOTNGNzJBRjExNjY2RURGQzAwMkEwMkJEIC8q
IExheWVyUG9vbC5oICovLAorCQkJCTkzRjcyQUYyMTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBv
b2wubW0gKi8sCiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVDYWNoZUxh
eWVyLmggKi8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVDYWNoZUxh
eWVyLm1tICovLAogCQkJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIu
aCAqLywKQEAgLTI1ODM2LDYgKzI1ODQyLDcgQEAKIAkJCQlGQjJDMTVDMzE2NUQ2NDlEMDAzOUM5
RjggLyogQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
NzQxQUFEMTY2MzY2MDkwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE1QjhCN0M5MTY1MkM1MjIwMDM2RUY1NSAvKiBKU1dlYktpdENTU01peEZ1
bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjcyQUYzMTY2NkVERkMwMDJBMDJC
RCAvKiBMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjg5MzksNiArMjg5NDYsNyBAQAog
CQkJCTQ0Nzk1ODA1MTY0M0I0QjIwMDFFMEE3RiAvKiBQYXJzZWRDb250ZW50VHlwZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNUI4QjdDODE2NTJDNTIyMDAzNkVGNTUgLyogSlNXZWJLaXRDU1NN
aXhGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QkE3NjZFMTY2NDI3QTgw
MDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzRjcy
QUY0MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQ
b29sLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9tYWMvTGF5ZXJQb29sLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIExheWVyUG9vbF9oCisjZGVmaW5lIExheWVyUG9vbF9oCisKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBXZWJUaWxlTGF5ZXI7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICAKK2NsYXNzIExheWVyUG9vbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
TGF5ZXJQb29sKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTGF5ZXJQb29sKiBzaGFyZWRQb29sKCk7
CisgICAgCisgICAgdm9pZCBhZGRMYXllcihjb25zdCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYp
OworICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IHRha2VMYXllcldpdGhTaXplKGNvbnN0IElu
dFNpemUmKTsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIC8vIFRoZSBtYXhpbXVtIHNpemUg
b2YgYWxsIHF1ZXVlZCBsYXllcnMgaW4gYnl0ZXMuCisgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBj
b25zdCB7IHJldHVybiBtX21heEJ5dGVzRm9yUG9vbDsgfQorICAgIHVuc2lnbmVkIGRlY2F5ZWRD
YXBhY2l0eSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIExheWVyUG9vbCgpOworCisgICAgdHlw
ZWRlZiBEZXF1ZTxSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiA+IExheWVyTGlzdDsKKworICAgIGJv
b2wgY2FuUmV1c2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4Qnl0ZXNGb3JQb29sICYmICFzaXplLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgc2No
ZWR1bGVQcnVuZSgpOworICAgIHZvaWQgcHJ1bmVUaW1lckZpcmVkKFRpbWVyPExheWVyUG9vbD4q
KTsKKworICAgIHR5cGVkZWYgZW51bSB7IExlYXZlVW5jaGFuZ2VkLCBNYXJrQXNVc2VkIH0gQWNj
ZXNzVHlwZTsKKyAgICBMYXllckxpc3QmIGxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNp
emUmLCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBMZWF2ZVVuY2hhbmdlZCk7CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGNvbnN0IEludFNpemUm
IHNpemUpOworCisgICAgSGFzaE1hcDxJbnRTaXplLCBMYXllckxpc3Q+IG1fcmV1c2VMaXN0czsK
KyAgICAvLyBPcmRlcmVkIGJ5IHJlY2VudCB1c2UuICBUaGUgbGFzdCBzaXplIGlzIHRoZSBtb3N0
IHJlY2VudGx5IHVzZWQuCisgICAgVmVjdG9yPEludFNpemU+IG1fc2l6ZXNJblBydW5lT3JkZXI7
CisgICAgdW5zaWduZWQgbV90b3RhbEJ5dGVzOworICAgIHVuc2lnbmVkIG1fbWF4Qnl0ZXNGb3JQ
b29sOworCisgICAgVGltZXI8TGF5ZXJQb29sPiBtX3BydW5lVGltZXI7CisKKyAgICBkb3VibGUg
bV9sYXN0QWRkVGltZTsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQb29sLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0JKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQb29s
Lm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkxheWVyUG9vbC5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
IldlYlRpbGVMYXllci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCitzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1l
ID0gNTsKKyAgICAKK0xheWVyUG9vbDo6TGF5ZXJQb29sKCkKKyAgICA6IG1fdG90YWxCeXRlcygw
KQorICAgICwgbV9tYXhCeXRlc0ZvclBvb2woNDggKiAxMDI0ICogMTAyNCkKKyAgICAsIG1fcHJ1
bmVUaW1lcih0aGlzLCAmTGF5ZXJQb29sOjpwcnVuZVRpbWVyRmlyZWQpCisgICAgLCBtX2xhc3RB
ZGRUaW1lKDApCit7Cit9CisKK0xheWVyUG9vbCogTGF5ZXJQb29sOjpzaGFyZWRQb29sKCkKK3sK
KyAgICBzdGF0aWMgTGF5ZXJQb29sKiBzaGFyZWRQb29sID0gbmV3IExheWVyUG9vbDsKKyAgICBy
ZXR1cm4gc2hhcmVkUG9vbDsKK30KKwordW5zaWduZWQgTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdM
YXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gc2l6
ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Cit9CisKK0xheWVyUG9vbDo6TGF5ZXJMaXN0
JiBMYXllclBvb2w6Omxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSkKK3sKKyAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46
Oml0ZXJhdG9yIGl0ID0gbV9yZXVzZUxpc3RzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0ID09IG1f
cmV1c2VMaXN0cy5lbmQoKSkgeworICAgICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQoc2l6ZSwg
TGF5ZXJMaXN0KCkpLml0ZXJhdG9yOworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVu
ZChzaXplKTsKKyAgICB9IGVsc2UgaWYgKGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkgeworICAg
ICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVyLnJldmVy
c2VGaW5kKHNpemUpKTsKKyAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQoc2l6ZSk7
CisgICAgfQorICAgIHJldHVybiBpdC0+dmFsdWU7Cit9CisKK3ZvaWQgTGF5ZXJQb29sOjphZGRM
YXllcihjb25zdCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCit7CisgICAgSW50U2l6
ZSBsYXllclNpemUoW2xheWVyLmdldCgpIGJvdW5kc10uc2l6ZSk7CisgICAgaWYgKCFjYW5SZXVz
ZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGlzdE9m
TGF5ZXJzV2l0aFNpemUobGF5ZXJTaXplKS5wcmVwZW5kKGxheWVyKTsKKyAgICBtX3RvdGFsQnl0
ZXMgKz0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGxheWVyU2l6ZSk7CisgICAgCisg
ICAgbV9sYXN0QWRkVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgc2NoZWR1bGVQcnVuZSgpOwor
fQorCitSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUo
c2l6ZSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgTGF5ZXJMaXN0JiByZXVzZUxpc3QgPSBs
aXN0T2ZMYXllcnNXaXRoU2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKKyAgICBpZiAocmV1c2VMaXN0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBtX3RvdGFsQnl0ZXMgLT0gYnl0
ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemUpOworICAgIHJldHVybiByZXVzZUxpc3Qu
dGFrZUZpcnN0KCk7Cit9CisgICAgCit1bnNpZ25lZCBMYXllclBvb2w6OmRlY2F5ZWRDYXBhY2l0
eSgpIGNvbnN0Cit7CisgICAgLy8gRGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3ZlciBjYXBhY2l0eURl
Y2F5VGltZQorICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0QWRkID0gY3VycmVudFRpbWUoKSAtIG1f
bGFzdEFkZFRpbWU7CisgICAgaWYgKHRpbWVTaW5jZUxhc3RBZGQgPiBjYXBhY2l0eURlY2F5VGlt
ZSkKKyAgICAgICAgcmV0dXJuIG1fbWF4Qnl0ZXNGb3JQb29sIC8gNDsKKyAgICBmbG9hdCBkZWNh
eVByb2dlc3MgPSBmbG9hdCh0aW1lU2luY2VMYXN0QWRkIC8gY2FwYWNpdHlEZWNheVRpbWUpOwor
ICAgIHJldHVybiBtX21heEJ5dGVzRm9yUG9vbCAvIDQgKyBtX21heEJ5dGVzRm9yUG9vbCAqIDMg
LyA0ICogKDEgLSBkZWNheVByb2dlc3MpOworfQorCit2b2lkIExheWVyUG9vbDo6c2NoZWR1bGVQ
cnVuZSgpCit7CisgICAgaWYgKG1fcHJ1bmVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICByZXR1
cm47CisgICAgbV9wcnVuZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBMYXllclBv
b2w6OnBydW5lVGltZXJGaXJlZChUaW1lcjxMYXllclBvb2w+KikKK3sKKyAgICB1bnNpZ25lZCBz
aHJpbmtUbyA9IGRlY2F5ZWRDYXBhY2l0eSgpOworICAgIHdoaWxlIChtX3RvdGFsQnl0ZXMgPiBz
aHJpbmtUbykgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZXNJblBydW5lT3JkZXIuaXNFbXB0eSgp
KTsKKyAgICAgICAgSW50U2l6ZSBzaXplVG9Ecm9wID0gbV9zaXplc0luUHJ1bmVPcmRlci5maXJz
dCgpOworICAgICAgICBMYXllckxpc3QmIG9sZGVzdFJldXNlTGlzdCA9IG1fcmV1c2VMaXN0cy5m
aW5kKHNpemVUb0Ryb3ApLT52YWx1ZTsKKyAgICAgICAgaWYgKG9sZGVzdFJldXNlTGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIG1fcmV1c2VMaXN0cy5yZW1vdmUoc2l6ZVRvRHJvcCk7Cisg
ICAgICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLnJlbW92ZSgwKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbV90b3RhbEJ5dGVzIC09IGJ5dGVzQmFja2lu
Z0xheWVyV2l0aFBpeGVsU2l6ZShzaXplVG9Ecm9wKTsKKyAgICAgICAgLy8gVGhlIGxhc3QgZWxl
bWVudCBpbiB0aGUgbGlzdCBpcyB0aGUgb2xkZXN0LCBoZW5jZSBtb3N0IGxpa2VseSBub3QgdG8K
KyAgICAgICAgLy8gc3RpbGwgaGF2ZSBhIGJhY2tpbmcgc3RvcmUuCisgICAgICAgIG9sZGVzdFJl
dXNlTGlzdC5yZW1vdmUoLS1vbGRlc3RSZXVzZUxpc3QuZW5kKCkpOworICAgIH0KKyAgICBpZiAo
Y3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRpbWUgPD0gY2FwYWNpdHlEZWNheVRpbWUpCisgICAg
ICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30KKwordm9pZCBMYXllclBvb2w6OmRyYWluKCkKK3sKKyAg
ICBtX3JldXNlTGlzdHMuY2xlYXIoKTsKKyAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmNsZWFyKCk7
CisgICAgbV90b3RhbEJ5dGVzID0gMDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNhY2hlLm1tCShyZXZpc2lvbiAx
MzYwNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNh
Y2hlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW1wb3J0ICJJbnRSZWN0
LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgorI2lt
cG9ydCAiTGF5ZXJQb29sLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgogI2ltcG9ydCAiV2ViVGls
ZUNhY2hlTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVMYXllci5oIgpAQCAtNDE5LDcgKzQyMCw3
IEBAIHZvaWQgVGlsZUNhY2hlOjpyZXZhbGlkYXRlVGlsZXMoKQogICAgIC8vIHRoZSB0aWxlcyB0
aGF0IGFyZSBvdXRzaWRlIHRoZSBjb3ZlcmFnZSByZWN0LiBXaGVuIHdlIGtub3cgdGhhdCB3ZSdy
ZSBnb2luZyB0byBiZSBzY3JvbGxpbmcgdXAsCiAgICAgLy8gd2UgbWlnaHQgd2FudCB0byByZW1v
dmUgdGhlIG9uZXMgYmVsb3cgdGhlIGNvdmVyYWdlIHJlY3QgYnV0IGtlZXAgdGhlIG9uZXMgYWJv
dmUuCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytp
KQotICAgICAgICBtX3RpbGVzLnJlbW92ZSh0aWxlc1RvUmVtb3ZlW2ldKTsKKyAgICAgICAgTGF5
ZXJQb29sOjpzaGFyZWRQb29sKCktPmFkZExheWVyKG1fdGlsZXMudGFrZSh0aWxlc1RvUmVtb3Zl
W2ldKSk7CiAKICAgICBUaWxlSW5kZXggdG9wTGVmdDsKICAgICBUaWxlSW5kZXggYm90dG9tUmln
aHQ7CkBAIC00ODcsNyArNDg4LDkgQEAgV2ViVGlsZUxheWVyKiBUaWxlQ2FjaGU6OnRpbGVMYXll
ckF0SW5kZQogCiBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBUaWxlQ2FjaGU6OmNyZWF0ZVRpbGVM
YXllcihjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKLSAgICBSZXRhaW5QdHI8V2ViVGlsZUxh
eWVyPiBsYXllciA9IGFkb3B0TlMoW1tXZWJUaWxlTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICBS
ZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBsYXllciA9IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50
YWtlTGF5ZXJXaXRoU2l6ZSh0aWxlUmVjdC5zaXplKCkpOworICAgIGlmICghbGF5ZXIpCisgICAg
ICAgIGxheWVyID0gYWRvcHROUyhbW1dlYlRpbGVMYXllciBhbGxvY10gaW5pdF0pOwogICAgIFts
YXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107CiAgICAgW2xheWVyLmdldCgp
IHNldEZyYW1lOnRpbGVSZWN0XTsKICAgICBbbGF5ZXIuZ2V0KCkgc2V0VGlsZUNhY2hlOnRoaXNd
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFuZGxl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvTWVtb3J5
UHJlc3N1cmVIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAxMzYwNzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvTWVtb3J5UHJlc3N1cmVIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNoZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9NZW1vcnlDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ2FjaGUuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvTGF5ZXJQb29sLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUu
aD4KICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAKQEAgLTE0OCw2ICsxNDksOCBAQCB2b2lk
IE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZU1lbW9yCiAKICAgICBtZW1vcnlDYWNoZSgp
LT5wcnVuZVRvUGVyY2VudGFnZShjcml0aWNhbCA/IDAgOiAwLjVmKTsKIAorICAgIExheWVyUG9v
bDo6c2hhcmVkUG9vbCgpLT5kcmFpbigpOworCiAgICAgZ2NDb250cm9sbGVyKCkuZGlzY2FyZEFs
bENvbXBpbGVkQ29kZSgpOwogCiAgICAgV1RGOjpyZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnko
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176772</attachid>
            <date>2012-11-29 11:50:14 -0800</date>
            <delta_ts>2012-11-29 11:59:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>21547</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNjE0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTExLTI5ICBCZXRoIERh
a2luICA8YmRha2luQGFwcGxlLmNvbT4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTAzNTc3CisgICAgICAgIFRpbGVkRHJhd2luZ0FyZWEgc2hvdWxk
IHJlY3ljbGUgdGlsZXMKKyAgICAgICAgLWFuZCBjb3JyZXNwb25kaW5nLQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTI3MTQ1ODY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTmV3IGNsYXNzIExheWVyUG9vbCB3aWxsIGtlZXAgYSBsaXN0IG9mIGxh
eWVycyB0byByZXVzZSBzbyB0aGF0IAorICAgICAgICB3ZSBjYW4gYXZvaWQgY3JlYXRpbmcgYW5k
IGRlc3Ryb3lpbmcgc28gbWFueSBsYXllci4KKworICAgICAgICBXaGVuIHJlbW92aW5nIGxheWVy
cywgYWRkIHRoZW0gdG8gdGhlIExheWVyUG9vbAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9UaWxlQ2FjaGUubW06CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6OnJldmFs
aWRhdGVUaWxlcyk6CisKKyAgICAgICAgQmVmb3JlIGNyZWF0aW5nIGEgbmV3IGxheWVyLCB0cnkg
dG8gZ2V0IG9uZSBvZiB0aGUgYXBwcm9wcmlhdGUgc2l6ZSAKKyAgICAgICAgZnJvbSB0aGUgTGF5
ZXJQb29sLgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpjcmVhdGVUaWxlTGF5ZXIpOgor
CisgICAgICAgIE5ldyBjbGFzcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTGF5ZXJQb29sKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6Y2FwYWNpdHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJQb29sOjpjYW5SZXVzZUxheWVyV2l0aFNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllclBvb2wubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclBvb2w6OiBMYXllclBvb2wpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJQb29sOjpzaGFyZWRQb29sKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6Ynl0
ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9v
bDo6bGlzdE9mTGF5ZXJzV2l0aFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJQb29sOjph
ZGRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6ZGVjYXllZENhcGFjaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6c2NoZWR1bGVQcnVuZSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclBvb2w6OnBydW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6ZHJhaW4p
OgorCisgICAgICAgIElmIHdlJ3JlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgZHJhaW4gdGhlIExh
eWVyUG9vbAorICAgICAgICAqIHBsYXRmb3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1v
cnkpOgorCiAyMDEyLTExLTI5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEyNzcxODg1PiBTdXBwb3J0IHJ1YnktcG9zaXRpb246IHti
ZWZvcmUsIGFmdGVyfQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM2MTQyKQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMw
LDYgKzM0MzAsOCBAQAogCQk5M0YxRDVDMTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0YxRDVCRjEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250ZXh0LmggKi87IH07CiAJ
CTkzRjZGMUVEMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y2RjFFQTEyN0Y3MEIx
MDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuY3BwICovOyB9OwogCQk5M0Y2RjFFRTEyN0Y3
MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjZGMUVCMTI3RjcwQjEwMDU1Q0IwNiAvKiBXZWJH
TENvbnRleHRFdmVudC5oICovOyB9OworCQk5M0Y3MkFGMzE2NjZFREZDMDAyQTAyQkQgLyogTGF5
ZXJQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
M0Y3MkFGMTE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQb29sLmggKi87IH07CisJCTkzRjcyQUY0
MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y3MkFGMjE2NjZFREZDMDAyQTAyQkQgLyogTGF5ZXJQ
b29sLm1tICovOyB9OwogCQk5M0Y5MjU0MzBGN0VGNUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlv
QnV0dG9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OTNGOTI1NDEwRjdFRjVCODAwN0UzN0M5IC8qIENoZWNrZWRSYWRpb0J1dHRvbnMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Y5MjU0NDBGN0VG
NUI4MDA3RTM3QzkgLyogQ2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0Y5MjU0MjBGN0VGNUI4MDA3RTM3QzkgLyog
Q2hlY2tlZFJhZGlvQnV0dG9ucy5jcHAgKi87IH07CiAJCTkzRjlCNjU3MEJBMEYzNUUwMDg1NDA2
NCAvKiBET01IVE1MQ2FudmFzRWxlbWVudC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRjlCNjU0MEJBMEYzNUUwMDg1NDA2NCAvKiBET01IVE1MQ2Fu
dmFzRWxlbWVudC5tbSAqLzsgfTsKQEAgLTU5MjgsMTAgKzU5MzAsMTAgQEAKIAkJQ0RCODU5Rjcx
NjBENDhBNDAwRTVCMDdGIC8qIE1lZGlhS2V5RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RCODU5RjQxNjBENDg5OTAwRTVCMDdGIC8qIE1l
ZGlhS2V5RXZlbnQuY3BwICovOyB9OwogCQlDREI4NTlGQTE2MEQ0OTQ5MDBFNUIwN0YgLyogSlNN
ZWRpYUtleUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IENEQjg1OUY4MTYwRDQ5M0UwMEU1QjA3RiAvKiBKU01lZGlhS2V5RXZlbnQuY3BwICov
OyB9OwogCQlDREI4NTlGQjE2MEQ0OTRGMDBFNUIwN0YgLyogSlNNZWRpYUtleUVycm9yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQjg1OUYwMTYw
RDQyREQwMEU1QjA3RiAvKiBKU01lZGlhS2V5RXJyb3IuY3BwICovOyB9OwotCQlDREM2OUREQTE2
MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ4MTYzNzFG
RDMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQzY5RERCMTYzNzFG
RDQwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ5MTYzNzFGRDMw
MDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlblBsYWNlaG9sZGVyVmlldy5tbSAqLzsgfTsKIAkJ
Q0RDNjlERDYxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQzY5REQ0
MTYzMjAyNkMwMDdDMzhERiAvKiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RDNjlERDcxNjMy
MDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OURENTE2MzIwMjZDMDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5XYXJuaW5nVmlldy5tbSAqLzsgfTsKKwkJQ0RDNjlE
REExNjM3MUZENDAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREODE2
MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDREM2OUREQjE2
MzcxRkQ0MDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREM2OUREOTE2Mzcx
RkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW0gKi87IH07
CiAJCUNERDUyNUQ3MTQ1QjZERDAwMDhEMjA0RCAvKiBKU0hUTUxNZWRpYUVsZW1lbnRDdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RGNjVD
Q0MxNDVCNkFGRTAwQzRDN0FBIC8qIEpTSFRNTE1lZGlhRWxlbWVudEN1c3RvbS5jcHAgKi87IH07
CiAJCUNERUE3NjMwMTQ2MDhBNTMwMDhCMzFGMSAvKiBQbGF0Zm9ybUNsb2NrQ0EuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFQTc2MkUxNDYwODRE
RTAwOEIzMUYxIC8qIFBsYXRmb3JtQ2xvY2tDQS5jcHAgKi87IH07CiAJCUNERUE3NjM0MTQ2MEI1
NkYwMDhCMzFGMSAvKiBDbG9ja0dlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RFQTc2MzIxNDYwQUUyOTAwOEIzMUYxIC8qIENsb2NrR2Vu
ZXJpYy5jcHAgKi87IH07CkBAIC0xMDY4NCw2ICsxMDY4Niw4IEBACiAJCTkzRjZGMUVBMTI3Rjcw
QjEwMDU1Q0IwNiAvKiBXZWJHTENvbnRleHRFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJHTENvbnRleHRFdmVudC5jcHA7IHBhdGggPSBjYW52YXMvV2Vi
R0xDb250ZXh0RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y2RjFF
QjEyN0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xDb250ZXh0RXZlbnQuaDsgcGF0aCA9IGNhbnZhcy9XZWJH
TENvbnRleHRFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y2RjFFQzEy
N0Y3MEIxMDA1NUNCMDYgLyogV2ViR0xDb250ZXh0RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IFdlYkdMQ29udGV4dEV2ZW50LmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTENvbnRleHRF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzRjcyQUYxMTY2NkVERkMw
MDJBMDJCRCAvKiBMYXllclBvb2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TGF5ZXJQb29sLmg7IHBhdGggPSBjYS9tYWMvTGF5ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkzRjcyQUYyMTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBMYXllclBvb2wubW07IHBhdGgg
PSBjYS9tYWMvTGF5ZXJQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4
QjMwNTBBMzAwRkUxMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvci5wbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnBlcmw7IG5hbWUgPSBDb2RlR2VuZXJhdG9yLnBtOyBwYXRoID0gc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0Y4QjMwNjBBMzAw
RkVBMDBGNjFBQjggLyogQ29kZUdlbmVyYXRvckpTLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3JKUy5wbTsgcGF0aCA9IC4uL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB3cmFwc0xpbmVzID0gMDsgfTsK
IAkJOTNGOEIzMDcwQTMwMEZFQTAwRjYxQUI4IC8qIGdlbmVyYXRlLWJpbmRpbmdzLnBsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9ICJnZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHBh
dGggPSAic2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzM1NiwxMCArMTMzNjAsMTAgQEAKIAkJQ0RCODU5RjgxNjBENDkzRTAwRTVC
MDdGIC8qIEpTTWVkaWFLZXlFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU01lZGlhS2V5RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDREI4NTlGOTE2MEQ0OTNFMDBFNUIwN0YgLyogSlNNZWRpYUtleUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWVkaWFLZXlFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREJEOTNCQTEzMzNCRDRCMDAyNTcwRTMgLyogZnVsbHNjcmVlblF1
aWNrVGltZS5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IGZ1bGxzY3JlZW5RdWlja1Rp
bWUuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDREM2OUREODE2MzcxRkQzMDA3
QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQ0RDNjlERDkxNjM3MUZEMzAwN0MzOERGIC8q
IFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJWaWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUZ1bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQzY5REQ0MTYzMjAyNkMwMDdDMzhERiAv
KiBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVGdWxsU2NyZWVuV2FybmluZ1ZpZXcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQ0RDNjlERDUxNjMyMDI2QzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2Ny
ZWVuV2FybmluZ1ZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJDb3JlRnVsbFNjcmVlbldhcm5pbmdWaWV3Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDREM2OUREODE2MzcxRkQzMDA3QzM4REYgLyogV2ViQ29yZUZ1bGxTY3JlZW5QbGFj
ZWhvbGRlclZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUZ1
bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
Q0RDNjlERDkxNjM3MUZEMzAwN0MzOERGIC8qIFdlYkNvcmVGdWxsU2NyZWVuUGxhY2Vob2xkZXJW
aWV3Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZUZ1
bGxTY3JlZW5QbGFjZWhvbGRlclZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDREVBNzYyQzE0NjA4MjI0MDA4QjMxRjEgLyogQ2xvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQ0RFQTc2MkUxNDYwODRERTAwOEIzMUYxIC8qIFBsYXRmb3JtQ2xvY2tDQS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybUNsb2NrQ0EuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTUzOTYsNiArMTU0MDAsOCBAQAogCQkJ
CTQ5NTg3ODIwMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gKi8sCiAJ
CQkJMUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDYWNoZS5oICovLAogCQkJCTFBQTcx
NjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxlQ2FjaGUubW0gKi8sCisJCQkJOTNGNzJBRjExNjY2
RURGQzAwMkEwMkJEIC8qIExheWVyUG9vbC5oICovLAorCQkJCTkzRjcyQUYyMTY2NkVERkMwMDJB
MDJCRCAvKiBMYXllclBvb2wubW0gKi8sCiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8q
IFdlYlRpbGVDYWNoZUxheWVyLmggKi8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8q
IFdlYlRpbGVDYWNoZUxheWVyLm1tICovLAogCQkJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAv
KiBXZWJUaWxlTGF5ZXIuaCAqLywKQEAgLTI1ODM2LDYgKzI1ODQyLDcgQEAKIAkJCQlGQjJDMTVD
MzE2NUQ2NDlEMDAzOUM5RjggLyogQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxNzQxQUFEMTY2MzY2MDkwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09w
dGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1QjhCN0M5MTY1MkM1MjIwMDM2RUY1NSAvKiBK
U1dlYktpdENTU01peEZ1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjcyQUYz
MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjg5Mzks
NiArMjg5NDYsNyBAQAogCQkJCTQ0Nzk1ODA1MTY0M0I0QjIwMDFFMEE3RiAvKiBQYXJzZWRDb250
ZW50VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNUI4QjdDODE2NTJDNTIyMDAzNkVGNTUg
LyogSlNXZWJLaXRDU1NNaXhGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
QkE3NjZFMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9M
YXllclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvTGF5ZXJQb29sLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQb29sLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExheWVyUG9vbF9oCisjZGVmaW5lIExheWVyUG9v
bF9oCisKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKKyNp
bmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK0BjbGFzcyBXZWJUaWxlTGF5ZXI7CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIExheWVyUG9vbCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTGF5ZXJQb29sKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTGF5ZXJQb29s
KiBzaGFyZWRQb29sKCk7CisgICAgCisgICAgdm9pZCBhZGRMYXllcihjb25zdCBSZXRhaW5QdHI8
V2ViVGlsZUxheWVyPiYpOworICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IHRha2VMYXllcldp
dGhTaXplKGNvbnN0IEludFNpemUmKTsKKworICAgIHZvaWQgZHJhaW4oKTsKKworICAgIC8vIFRo
ZSBtYXhpbXVtIHNpemUgb2YgYWxsIHF1ZXVlZCBsYXllcnMgaW4gYnl0ZXMuCisgICAgdW5zaWdu
ZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX21heEJ5dGVzRm9yUG9vbDsgfQorICAgIHVu
c2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIExheWVyUG9v
bCgpOworCisgICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiA+IExheWVy
TGlzdDsKKworICAgIGJvb2wgY2FuUmV1c2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNp
emUpIGNvbnN0IHsgcmV0dXJuIG1fbWF4Qnl0ZXNGb3JQb29sICYmICFzaXplLmlzRW1wdHkoKTsg
fQorICAgIHZvaWQgc2NoZWR1bGVQcnVuZSgpOworICAgIHZvaWQgcHJ1bmVUaW1lckZpcmVkKFRp
bWVyPExheWVyUG9vbD4qKTsKKworICAgIHR5cGVkZWYgZW51bSB7IExlYXZlVW5jaGFuZ2VkLCBN
YXJrQXNVc2VkIH0gQWNjZXNzVHlwZTsKKyAgICBMYXllckxpc3QmIGxpc3RPZkxheWVyc1dpdGhT
aXplKGNvbnN0IEludFNpemUmLCBBY2Nlc3NUeXBlID0gTGVhdmVVbmNoYW5nZWQpOworCisgICAg
c3RhdGljIHVuc2lnbmVkIGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShjb25zdCBJbnRT
aXplJik7CisKKyAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD4gbV9yZXVzZUxpc3RzOwor
ICAgIC8vIE9yZGVyZWQgYnkgcmVjZW50IHVzZS4gVGhlIGxhc3Qgc2l6ZSBpcyB0aGUgbW9zdCBy
ZWNlbnRseSB1c2VkLgorICAgIFZlY3RvcjxJbnRTaXplPiBtX3NpemVzSW5QcnVuZU9yZGVyOwor
ICAgIHVuc2lnbmVkIG1fdG90YWxCeXRlczsKKyAgICB1bnNpZ25lZCBtX21heEJ5dGVzRm9yUG9v
bDsKKworICAgIFRpbWVyPExheWVyUG9vbD4gbV9wcnVuZVRpbWVyOworCisgICAgZG91YmxlIG1f
bGFzdEFkZFRpbWU7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQb29sLm1tCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5t
bQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJMYXllclBvb2wuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJX
ZWJUaWxlTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorc3RhdGljIGNvbnN0IGRvdWJsZSBjYXBhY2l0eURlY2F5VGltZSA9
IDU7CisgICAgCitMYXllclBvb2w6OkxheWVyUG9vbCgpCisgICAgOiBtX3RvdGFsQnl0ZXMoMCkK
KyAgICAsIG1fbWF4Qnl0ZXNGb3JQb29sKDQ4ICogMTAyNCAqIDEwMjQpCisgICAgLCBtX3BydW5l
VGltZXIodGhpcywgJkxheWVyUG9vbDo6cHJ1bmVUaW1lckZpcmVkKQorICAgICwgbV9sYXN0QWRk
VGltZSgwKQoreworfQorCitMYXllclBvb2wqIExheWVyUG9vbDo6c2hhcmVkUG9vbCgpCit7Cisg
ICAgc3RhdGljIExheWVyUG9vbCogc2hhcmVkUG9vbCA9IG5ldyBMYXllclBvb2w7CisgICAgcmV0
dXJuIHNoYXJlZFBvb2w7Cit9CisKK3Vuc2lnbmVkIExheWVyUG9vbDo6Ynl0ZXNCYWNraW5nTGF5
ZXJXaXRoUGl4ZWxTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIHNpemUu
d2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OworfQorCitMYXllclBvb2w6OkxheWVyTGlzdCYg
TGF5ZXJQb29sOjpsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXplLCBBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGUpCit7CisgICAgSGFzaE1hcDxJbnRTaXplLCBMYXllckxpc3Q+Ojpp
dGVyYXRvciBpdCA9IG1fcmV1c2VMaXN0cy5maW5kKHNpemUpOworICAgIGlmIChpdCA9PSBtX3Jl
dXNlTGlzdHMuZW5kKCkpIHsKKyAgICAgICAgaXQgPSBtX3JldXNlTGlzdHMuYWRkKHNpemUsIExh
eWVyTGlzdCgpKS5pdGVyYXRvcjsKKyAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQo
c2l6ZSk7CisgICAgfSBlbHNlIGlmIChhY2Nlc3NUeXBlID09IE1hcmtBc1VzZWQpIHsKKyAgICAg
ICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUobV9zaXplc0luUHJ1bmVPcmRlci5yZXZlcnNl
RmluZChzaXplKSk7CisgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIuYXBwZW5kKHNpemUpOwor
ICAgIH0KKyAgICByZXR1cm4gaXQtPnZhbHVlOworfQorCit2b2lkIExheWVyUG9vbDo6YWRkTGF5
ZXIoY29uc3QgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4mIGxheWVyKQoreworICAgIEludFNpemUg
bGF5ZXJTaXplKFtsYXllci5nZXQoKSBib3VuZHNdLnNpemUpOworICAgIGlmICghY2FuUmV1c2VM
YXllcldpdGhTaXplKGxheWVyU2l6ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGxpc3RPZkxh
eWVyc1dpdGhTaXplKGxheWVyU2l6ZSkucHJlcGVuZChsYXllcik7CisgICAgbV90b3RhbEJ5dGVz
ICs9IGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShsYXllclNpemUpOworICAgIAorICAg
IG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50VGltZSgpOworICAgIHNjaGVkdWxlUHJ1bmUoKTsKK30K
KworUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gTGF5ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlmICghY2FuUmV1c2VMYXllcldpdGhTaXplKHNp
emUpKQorICAgICAgICByZXR1cm4gbmlsOworICAgIExheWVyTGlzdCYgcmV1c2VMaXN0ID0gbGlz
dE9mTGF5ZXJzV2l0aFNpemUoc2l6ZSwgTWFya0FzVXNlZCk7CisgICAgaWYgKHJldXNlTGlzdC5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgbV90b3RhbEJ5dGVzIC09IGJ5dGVz
QmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShzaXplKTsKKyAgICByZXR1cm4gcmV1c2VMaXN0LnRh
a2VGaXJzdCgpOworfQorICAgIAordW5zaWduZWQgTGF5ZXJQb29sOjpkZWNheWVkQ2FwYWNpdHko
KSBjb25zdAoreworICAgIC8vIERlY2F5IHRvIG9uZSBxdWFydGVyIG92ZXIgY2FwYWNpdHlEZWNh
eVRpbWUKKyAgICBkb3VibGUgdGltZVNpbmNlTGFzdEFkZCA9IGN1cnJlbnRUaW1lKCkgLSBtX2xh
c3RBZGRUaW1lOworICAgIGlmICh0aW1lU2luY2VMYXN0QWRkID4gY2FwYWNpdHlEZWNheVRpbWUp
CisgICAgICAgIHJldHVybiBtX21heEJ5dGVzRm9yUG9vbCAvIDQ7CisgICAgZmxvYXQgZGVjYXlQ
cm9nZXNzID0gZmxvYXQodGltZVNpbmNlTGFzdEFkZCAvIGNhcGFjaXR5RGVjYXlUaW1lKTsKKyAg
ICByZXR1cm4gbV9tYXhCeXRlc0ZvclBvb2wgLyA0ICsgbV9tYXhCeXRlc0ZvclBvb2wgKiAzIC8g
NCAqICgxIC0gZGVjYXlQcm9nZXNzKTsKK30KKwordm9pZCBMYXllclBvb2w6OnNjaGVkdWxlUHJ1
bmUoKQoreworICAgIGlmIChtX3BydW5lVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fcHJ1bmVUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9CisKK3ZvaWQgTGF5ZXJQb29s
OjpwcnVuZVRpbWVyRmlyZWQoVGltZXI8TGF5ZXJQb29sPiopCit7CisgICAgdW5zaWduZWQgc2hy
aW5rVG8gPSBkZWNheWVkQ2FwYWNpdHkoKTsKKyAgICB3aGlsZSAobV90b3RhbEJ5dGVzID4gc2hy
aW5rVG8pIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemVzSW5QcnVuZU9yZGVyLmlzRW1wdHkoKSk7
CisgICAgICAgIEludFNpemUgc2l6ZVRvRHJvcCA9IG1fc2l6ZXNJblBydW5lT3JkZXIuZmlyc3Qo
KTsKKyAgICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RSZXVzZUxpc3QgPSBtX3JldXNlTGlzdHMuZmlu
ZChzaXplVG9Ecm9wKS0+dmFsdWU7CisgICAgICAgIGlmIChvbGRlc3RSZXVzZUxpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBtX3JldXNlTGlzdHMucmVtb3ZlKHNpemVUb0Ryb3ApOworICAg
ICAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5yZW1vdmUoMCk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fdG90YWxCeXRlcyAtPSBieXRlc0JhY2tpbmdM
YXllcldpdGhQaXhlbFNpemUoc2l6ZVRvRHJvcCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGVsZW1l
bnQgaW4gdGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwgaGVuY2UgbW9zdCBsaWtlbHkgbm90IHRvCisg
ICAgICAgIC8vIHN0aWxsIGhhdmUgYSBiYWNraW5nIHN0b3JlLgorICAgICAgICBvbGRlc3RSZXVz
ZUxpc3QucmVtb3ZlKC0tb2xkZXN0UmV1c2VMaXN0LmVuZCgpKTsKKyAgICB9CisgICAgaWYgKGN1
cnJlbnRUaW1lKCkgLSBtX2xhc3RBZGRUaW1lIDw9IGNhcGFjaXR5RGVjYXlUaW1lKQorICAgICAg
ICBzY2hlZHVsZVBydW5lKCk7Cit9CisKK3ZvaWQgTGF5ZXJQb29sOjpkcmFpbigpCit7CisgICAg
bV9yZXVzZUxpc3RzLmNsZWFyKCk7CisgICAgbV9zaXplc0luUHJ1bmVPcmRlci5jbGVhcigpOwor
ICAgIG1fdG90YWxCeXRlcyA9IDA7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbQkocmV2aXNpb24gMTM2
MTQyKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNo
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2ltcG9ydCAiSW50UmVjdC5o
IgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW1wb3J0ICJSZWdpb24uaCIKKyNpbXBv
cnQgIkxheWVyUG9vbC5oIgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVD
YWNoZUxheWVyLmgiCiAjaW1wb3J0ICJXZWJUaWxlTGF5ZXIuaCIKQEAgLTQxOSw3ICs0MjAsNyBA
QCB2b2lkIFRpbGVDYWNoZTo6cmV2YWxpZGF0ZVRpbGVzKCkKICAgICAvLyB0aGUgdGlsZXMgdGhh
dCBhcmUgb3V0c2lkZSB0aGUgY292ZXJhZ2UgcmVjdC4gV2hlbiB3ZSBrbm93IHRoYXQgd2UncmUg
Z29pbmcgdG8gYmUgc2Nyb2xsaW5nIHVwLAogICAgIC8vIHdlIG1pZ2h0IHdhbnQgdG8gcmVtb3Zl
IHRoZSBvbmVzIGJlbG93IHRoZSBjb3ZlcmFnZSByZWN0IGJ1dCBrZWVwIHRoZSBvbmVzIGFib3Zl
LgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkK
LSAgICAgICAgbV90aWxlcy5yZW1vdmUodGlsZXNUb1JlbW92ZVtpXSk7CisgICAgICAgIExheWVy
UG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcihtX3RpbGVzLnRha2UodGlsZXNUb1JlbW92ZVtp
XSkpOwogCiAgICAgVGlsZUluZGV4IHRvcExlZnQ7CiAgICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0
OwpAQCAtNDg3LDcgKzQ4OCw5IEBAIFdlYlRpbGVMYXllciogVGlsZUNhY2hlOjp0aWxlTGF5ZXJB
dEluZGUKIAogUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gVGlsZUNhY2hlOjpjcmVhdGVUaWxlTGF5
ZXIoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCiB7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXll
cj4gbGF5ZXIgPSBhZG9wdE5TKFtbV2ViVGlsZUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgUmV0
YWluUHRyPFdlYlRpbGVMYXllcj4gbGF5ZXIgPSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFr
ZUxheWVyV2l0aFNpemUodGlsZVJlY3Quc2l6ZSgpKTsKKyAgICBpZiAoIWxheWVyKQorICAgICAg
ICBsYXllciA9IGFkb3B0TlMoW1tXZWJUaWxlTGF5ZXIgYWxsb2NdIGluaXRdKTsKICAgICBbbGF5
ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9dOwogICAgIFtsYXllci5nZXQoKSBz
ZXRGcmFtZTp0aWxlUmVjdF07CiAgICAgW2xheWVyLmdldCgpIHNldFRpbGVDYWNoZTp0aGlzXTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9NZW1vcnlQcmVzc3VyZUhhbmRsZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL01lbW9yeVBy
ZXNzdXJlSGFuZGxlck1hYy5tbQkocmV2aXNpb24gMTM2MTQyKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL01lbW9yeVByZXNzdXJlSGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FjaGUuaD4KICNpbXBvcnQg
PFdlYkNvcmUvTWVtb3J5Q2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUNhY2hlLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL0xheWVyUG9vbC5oPgogI2ltcG9ydCA8d3RmL0N1cnJlbnRUaW1lLmg+
CiAjaW1wb3J0IDx3dGYvRmFzdE1hbGxvYy5oPgogCkBAIC0xNDgsNiArMTQ5LDggQEAgdm9pZCBN
ZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnJlbGVhc2VNZW1vcgogCiAgICAgbWVtb3J5Q2FjaGUoKS0+
cHJ1bmVUb1BlcmNlbnRhZ2UoY3JpdGljYWwgPyAwIDogMC41Zik7CiAKKyAgICBMYXllclBvb2w6
OnNoYXJlZFBvb2woKS0+ZHJhaW4oKTsKKwogICAgIGdjQ29udHJvbGxlcigpLmRpc2NhcmRBbGxD
b21waWxlZENvZGUoKTsKIAogICAgIFdURjo6cmVsZWFzZUZhc3RNYWxsb2NGcmVlTWVtb3J5KCk7
Cg==
</data>
<flag name="review"
          id="192657"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>