<?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>143834</bug_id>
          
          <creation_ts>2015-04-16 11:42:00 -0700</creation_ts>
          <short_desc>Compiling a content extension fails when user&apos;s home directory is on a different volume from /var/tmp</short_desc>
          <delta_ts>2015-04-16 17:54:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085993</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 11:42:00 -0700</bug_when>
    <thetext>Compiling a content extension fails when user&apos;s home directory is on a different volume from /var/tmp

When compiling the extension to a temporary file, the extension is then moved to ~/Library via &quot;rename&quot;, but rename() fails when moving across volumes.

In the case where rename() fails due to a cross-device error, fallback to the standard &quot;copy file contents then delete the old file&quot; mechanism.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086030</commentid>
    <comment_count>1</comment_count>
      <attachid>250942</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 13:00:21 -0700</bug_when>
    <thetext>Created attachment 250942
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086036</commentid>
    <comment_count>2</comment_count>
      <attachid>250942</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-16 13:09:02 -0700</bug_when>
    <thetext>Comment on attachment 250942
Patch v1

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

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:84
&gt; +    // Open the file for writing only, creating it, and failing if it already exists.
&gt; +    int outModeFlags = O_WRONLY | O_CREAT | O_EXCL;

Why do we want to fail if it already exists?  Shouldn&apos;t moveFile overwrite any existing file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086038</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 13:10:11 -0700</bug_when>
    <thetext>Will be asking for the eyes of multiple reviewers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086039</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 13:11:50 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 250942 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250942&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:84
&gt; &gt; +    // Open the file for writing only, creating it, and failing if it already exists.
&gt; &gt; +    int outModeFlags = O_WRONLY | O_CREAT | O_EXCL;
&gt; 
&gt; Why do we want to fail if it already exists?  Shouldn&apos;t moveFile overwrite
&gt; any existing file?

In general we&apos;re quite conservative in our FS operations in WebCore/Kit.

But I suppose the semantics of rename() are that the old file at the target location is first unlinked.

In that this supports rename(), I&apos;ll make that change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086040</commentid>
    <comment_count>5</comment_count>
      <attachid>250944</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 13:12:44 -0700</bug_when>
    <thetext>Created attachment 250944
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086042</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 13:14:11 -0700</bug_when>
    <thetext>(Yes, I understand that the semantics of `mv` are also to overwrite the target file by default, but moveFile itself is not being exposed to clients. If it were I&apos;d likely include an &quot;overwrite?&quot; option that defaults to false)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086044</commentid>
    <comment_count>7</comment_count>
      <attachid>250942</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-04-16 13:15:34 -0700</bug_when>
    <thetext>Comment on attachment 250942
Patch v1

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

You should probably just mmap the source file and then blat it down in a single write. Code should end up simpler as well. I&apos;m also concerned about permission elevation as mentioned inline.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:89
&gt; +    outFD = open(newPath.data(), outModeFlags, outPermissionFlags);

Why are we making the extension world readable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086045</commentid>
    <comment_count>8</comment_count>
      <attachid>250944</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2015-04-16 13:16:46 -0700</bug_when>
    <thetext>Comment on attachment 250944
Patch v2

R- for reasons attached to the last patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086047</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 13:18:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 250942 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250942&amp;action=review
&gt; 
&gt; You should probably just mmap the source file and then blat it down in a
&gt; single write. Code should end up simpler as well. I&apos;m also concerned about
&gt; permission elevation as mentioned inline.
&gt; 

That&apos;s a good idea!

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:89
&gt; &gt; +    outFD = open(newPath.data(), outModeFlags, outPermissionFlags);
&gt; 
&gt; Why are we making the extension world readable?

I was wearing two hats - Fixing content extensions, and writing a more general purpose function.

I agree, no need for world (or even group!) readability *right now*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086094</commentid>
    <comment_count>10</comment_count>
      <attachid>250954</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 15:26:16 -0700</bug_when>
    <thetext>Created attachment 250954
Patch v3 - MMAP and tighter permissions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086101</commentid>
    <comment_count>11</comment_count>
      <attachid>250954</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 15:43:01 -0700</bug_when>
    <thetext>Comment on attachment 250954
Patch v3 - MMAP and tighter permissions

NM Anders wants us to not provide a POSIX impl and use NSFileManager instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086124</commentid>
    <comment_count>12</comment_count>
      <attachid>250964</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:01:27 -0700</bug_when>
    <thetext>Created attachment 250964
Patch v4 - Fallback to NSFileManager</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086127</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 16:04:03 -0700</bug_when>
    <thetext>Attachment 250964 did not pass style-queue:


ERROR: Source/WebCore/platform/FileSystem.cpp:102:  Tab found; better to use spaces  [whitespace/tab] [1]
ERROR: Source/WebCore/platform/FileSystem.cpp:103:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 2 in 5 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>1086133</commentid>
    <comment_count>14</comment_count>
      <attachid>250964</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-04-16 16:07:27 -0700</bug_when>
    <thetext>Comment on attachment 250964
Patch v4 - Fallback to NSFileManager

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

&gt; Source/WebCore/platform/mac/FileSystemMac.mm:73
&gt; +    NSError *error = nil;
&gt; +    [[NSFileManager defaultManager] moveItemAtPath:(NSString *)oldPath toPath:(NSString *)newPath error:&amp;error];

The right way to test for success is to check the return value, not whether error is nil or not (that&apos;s not guaranteed).

This should use the moveItemAtURL:toURL:error: method (Together with -[NSURL fileURLWithPath:].

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:94
&gt; +    int result = rename(oldPathFsRep.data(), newPathFsRep.data());
&gt; +    if (!result)
&gt; +        return true;
&gt; +
&gt; +    if (errno != EXDEV)
&gt; +        return false;
&gt; +
&gt; +    // The paths exist on different devices so a simple rename will not work.
&gt; +    // We have to manually move the file.
&gt; +    return moveFile(oldPath, newPath);
&gt;  }

Instead of modifying the behavior of renameFile, I think you should just make whoever calls renameFile call moveFile instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086140</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:11:06 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 250964 [details]
&gt; Patch v4 - Fallback to NSFileManager
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250964&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/mac/FileSystemMac.mm:73
&gt; &gt; +    NSError *error = nil;
&gt; &gt; +    [[NSFileManager defaultManager] moveItemAtPath:(NSString *)oldPath toPath:(NSString *)newPath error:&amp;error];
&gt; 
&gt; The right way to test for success is to check the return value, not whether
&gt; error is nil or not (that&apos;s not guaranteed).

Fair enough.

&gt; 
&gt; This should use the moveItemAtURL:toURL:error: method (Together with -[NSURL
&gt; fileURLWithPath:].

Since we already have fully qualified paths, it seems wasteful to use the URL form unless it actually has advantages other than &quot;urls seem nicer&quot;.

&gt; 
&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:94
&gt; &gt; +    int result = rename(oldPathFsRep.data(), newPathFsRep.data());
&gt; &gt; +    if (!result)
&gt; &gt; +        return true;
&gt; &gt; +
&gt; &gt; +    if (errno != EXDEV)
&gt; &gt; +        return false;
&gt; &gt; +
&gt; &gt; +    // The paths exist on different devices so a simple rename will not work.
&gt; &gt; +    // We have to manually move the file.
&gt; &gt; +    return moveFile(oldPath, newPath);
&gt; &gt;  }
&gt; 
&gt; Instead of modifying the behavior of renameFile, I think you should just
&gt; make whoever calls renameFile call moveFile instead.

There&apos;s only one caller.

Maybe renameFile should just be the NSFileManager version on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086147</commentid>
    <comment_count>16</comment_count>
      <attachid>250971</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:21:45 -0700</bug_when>
    <thetext>Created attachment 250971
Patch v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086150</commentid>
    <comment_count>17</comment_count>
      <attachid>250973</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:23:58 -0700</bug_when>
    <thetext>Created attachment 250973
Patch v6</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086151</commentid>
    <comment_count>18</comment_count>
      <attachid>250973</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2015-04-16 16:25:38 -0700</bug_when>
    <thetext>Comment on attachment 250973
Patch v6

Sorry for being unclear. Here&apos;s what I think we should do:

- renameFile should keep its semantics of being an atomic POSIX rename.
- The WebKit2 call to renameFile should be a call to moveFile instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086153</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:27:49 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 250973 [details]
&gt; Patch v6
&gt; 
&gt; Sorry for being unclear. Here&apos;s what I think we should do:
&gt; 
&gt; - renameFile should keep its semantics of being an atomic POSIX rename.
&gt; - The WebKit2 call to renameFile should be a call to moveFile instead.

If we do that, renameFile will be dead code. Single call site in WK2 is the only caller.

I&apos;ll nuke it and make WK2 use moveFile instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086159</commentid>
    <comment_count>20</comment_count>
      <attachid>250977</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:32:06 -0700</bug_when>
    <thetext>Created attachment 250977
Patch v7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086160</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-04-16 16:32:59 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; If we do that, renameFile will be dead code. Single call site in WK2 is the
&gt; only caller.

In addition, that call site only compiles on Mac/iOS right now, so we only need the NSFileManager version of the call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086204</commentid>
    <comment_count>22</comment_count>
      <attachid>250977</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 17:54:23 -0700</bug_when>
    <thetext>Comment on attachment 250977
Patch v7

Clearing flags on attachment: 250977

Committed r182932: &lt;http://trac.webkit.org/changeset/182932&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086205</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-16 17:54:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250942</attachid>
            <date>2015-04-16 13:00:21 -0700</date>
            <delta_ts>2015-04-16 15:26:16 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3690</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li45YWU4MDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6bW92ZUZpbGUpOiBBdHRl
bXB0IHRvIGNvcHkgdGhlIGZpbGUgdG8gdGhlIHRhcmdldCBsb2NhdGlvbiB0aGVuIHJlbW92ZSB0
aGUgc291cmNlIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogSWYgcmVuYW1l
KCkgZmFpbHMgZHVlIHRvIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBiZWluZyBvbiBkaWZmZXJlbnQg
ZGV2aWNlcywKKyAgICAgICAgICBmYWxsYmFjayB0byBtb3ZlRmlsZSgpLgorCiAyMDE1LTA0LTE1
ICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXgg
RGVidWcgYnVpbGQgZXJyb3IgJ2NvbXBhcmlzb24gb2YgdW5zaWduZWQgZXhwcmVzc2lvbiA+PSAw
IGlzIGFsd2F5cyB0cnVlIFstV2Vycm9yPXR5cGUtbGltaXRzXScKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGU5NDgwNTcuLmIy
MDdkOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0
ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3Rl
bVBPU0lYLmNwcApAQCAtNzEsNiArNzEsNjMgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKICAgICByZXR1cm4gIXVubGluayhmc1JlcC5kYXRhKCkpOwogfQogCitzdGF0aWMg
Ym9vbCBtb3ZlRmlsZShjb25zdCBDU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBDU3RyaW5nJiBuZXdQ
YXRoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaW50IG91dEZEID0gLTE7
CisgICAgaW50IGluRkQgPSAtMTsKKyAgICBpbnQgYnl0ZXNSZWFkID0gMDsKKyAgICBjaGFyIGJ1
ZmZlclt2bV9wYWdlX3NpemVdOworCisgICAgLy8gT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZyBv
bmx5LCBjcmVhdGluZyBpdCwgYW5kIGZhaWxpbmcgaWYgaXQgYWxyZWFkeSBleGlzdHMuCisgICAg
aW50IG91dE1vZGVGbGFncyA9IE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTDsKKworICAgIC8v
IFNldCB1c2VyLCBncm91cCwgYW5kIGV2ZXJ5Ym9keSBwZXJtaXNzaW9ucyB0byByZWFkL3dyaXRl
LgorICAgIGludCBvdXRQZXJtaXNzaW9uRmxhZ3MgPSBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJH
UlAgfCBTX0lXR1JQIHwgU19JUk9USCB8IFNfSVdPVEg7CisKKyAgICBvdXRGRCA9IG9wZW4obmV3
UGF0aC5kYXRhKCksIG91dE1vZGVGbGFncywgb3V0UGVybWlzc2lvbkZsYWdzKTsKKyAgICBpZiAo
b3V0RkQgPCAwKQorICAgICAgICBnb3RvIGNsZWFudXA7CisKKyAgICBpbkZEID0gb3BlbihvbGRQ
YXRoLmRhdGEoKSwgT19SRE9OTFkpOworICAgIGlmIChpbkZEIDwgMCkKKyAgICAgICAgZ290byBj
bGVhbnVwOworCisgICAgYnl0ZXNSZWFkID0gcmVhZChpbkZELCBidWZmZXIsIHZtX3BhZ2Vfc2l6
ZSk7CisgICAgd2hpbGUgKGJ5dGVzUmVhZCA+IDApIHsKKyAgICAgICAgY2hhciogb3V0UG9pbnRl
ciA9IGJ1ZmZlcjsKKyAgICAgICAgaW50IGJ5dGVzVG9Xcml0ZSA9IGJ5dGVzUmVhZDsKKworICAg
ICAgICBkbyB7CisgICAgICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gd3JpdGUob3V0RkQsIG91
dFBvaW50ZXIsIGJ5dGVzVG9Xcml0ZSk7CisgICAgICAgICAgICBpZiAoYnl0ZXNXcml0dGVuID49
IDApIHsKKyAgICAgICAgICAgICAgICBvdXRQb2ludGVyICs9IGJ5dGVzV3JpdHRlbjsKKyAgICAg
ICAgICAgICAgICBieXRlc1RvV3JpdGUgLT0gYnl0ZXNXcml0dGVuOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICB9IHdoaWxlIChieXRl
c1RvV3JpdGUpOworCisgICAgICAgIGJ5dGVzUmVhZCA9IHJlYWQoaW5GRCwgYnVmZmVyLCB2bV9w
YWdlX3NpemUpOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBhIGNvcHkg
b2YgdGhlIGZpbGUgaW4gdGhlIHRhcmdldCBsb2NhdGlvbi4KKyAgICAvLyBEZWxldGUgdGhlIG9y
aWdpbmFsIGZpbGUuCisgICAgc3VjY2VzcyA9ICF1bmxpbmsob2xkUGF0aC5kYXRhKCkpOworCitj
bGVhbnVwOgorICAgIGlmIChvdXRGRCA+PSAwKQorICAgICAgICBjbG9zZShvdXRGRCk7CisgICAg
aWYgKGluRkQgPj0gMCkKKyAgICAgICAgY2xvc2UoaW5GRCk7CisKKyAgICAvLyBJZiB3ZSBkaWQg
Y3JlYXRlIHRvIHRhcmdldCBmaWxlIGJ1dCB0aGUgY29weSB3YXNuJ3Qgc3VjY2Vzc2Z1bCwgd2Ug
c2hvdWxkIGRlbGV0ZSB0aGUgc3RhbGUgdGFyZ2V0IGZpbGUuCisgICAgaWYgKCFzdWNjZXNzICYm
IG91dEZEKQorICAgICAgICB1bmxpbmsobmV3UGF0aC5kYXRhKCkpOworCisgICAgcmV0dXJuIHN1
Y2Nlc3M7Cit9CisKIGJvb2wgcmVuYW1lRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0
IFN0cmluZyYgbmV3UGF0aCkKIHsKICAgICBDU3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKQEAgLTgxLDcgKzEzOCwxNiBAQCBib29sIHJlbmFt
ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCiAgICAg
aWYgKCFuZXdQYXRoRnNSZXAuZGF0YSgpIHx8IG5ld1BhdGhGc1JlcC5kYXRhKClbMF0gPT0gJ1ww
JykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuICFyZW5hbWUob2xkUGF0aEZz
UmVwLmRhdGEoKSwgbmV3UGF0aEZzUmVwLmRhdGEoKSk7CisgICAgaW50IHJlc3VsdCA9IHJlbmFt
ZShvbGRQYXRoRnNSZXAuZGF0YSgpLCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoZXJybm8gIT0gRVhERVYpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFRoZSBmaWxlcyBleGlzdCBvbiBkaWZmZXJl
bnQgZGV2aWNlcyBzbyBhIHNpbXBsZSByZW5hbWUgd2lsbCBub3Qgd29yay4KKyAgICAvLyBXZSBo
YXZlIHRvIGNvcHkgYW5kIGRlbGV0ZSB0aGUgZmlsZS4KKyAgICByZXR1cm4gbW92ZUZpbGUob2xk
UGF0aEZzUmVwLCBuZXdQYXRoRnNSZXApOwogfQogCiBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250944</attachid>
            <date>2015-04-16 13:12:44 -0700</date>
            <delta_ts>2015-04-16 15:26:16 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3667</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li45YWU4MDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6bW92ZUZpbGUpOiBBdHRl
bXB0IHRvIGNvcHkgdGhlIGZpbGUgdG8gdGhlIHRhcmdldCBsb2NhdGlvbiB0aGVuIHJlbW92ZSB0
aGUgc291cmNlIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogSWYgcmVuYW1l
KCkgZmFpbHMgZHVlIHRvIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBiZWluZyBvbiBkaWZmZXJlbnQg
ZGV2aWNlcywKKyAgICAgICAgICBmYWxsYmFjayB0byBtb3ZlRmlsZSgpLgorCiAyMDE1LTA0LTE1
ICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXgg
RGVidWcgYnVpbGQgZXJyb3IgJ2NvbXBhcmlzb24gb2YgdW5zaWduZWQgZXhwcmVzc2lvbiA+PSAw
IGlzIGFsd2F5cyB0cnVlIFstV2Vycm9yPXR5cGUtbGltaXRzXScKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGU5NDgwNTcuLjFj
NmY2NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0
ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3Rl
bVBPU0lYLmNwcApAQCAtNzEsNiArNzEsNjMgQEAgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKICAgICByZXR1cm4gIXVubGluayhmc1JlcC5kYXRhKCkpOwogfQogCitzdGF0aWMg
Ym9vbCBtb3ZlRmlsZShjb25zdCBDU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBDU3RyaW5nJiBuZXdQ
YXRoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaW50IG91dEZEID0gLTE7
CisgICAgaW50IGluRkQgPSAtMTsKKyAgICBpbnQgYnl0ZXNSZWFkID0gMDsKKyAgICBjaGFyIGJ1
ZmZlclt2bV9wYWdlX3NpemVdOworCisgICAgLy8gT3BlbiB0aGUgZmlsZSBmb3Igd3JpdGluZyBv
bmx5LCBjcmVhdGluZyBpdCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgIGludCBvdXRNb2RlRmxh
Z3MgPSBPX1dST05MWSB8IE9fQ1JFQVQ7CisKKyAgICAvLyBTZXQgdXNlciwgZ3JvdXAsIGFuZCBl
dmVyeWJvZHkgcGVybWlzc2lvbnMgdG8gcmVhZC93cml0ZS4KKyAgICBpbnQgb3V0UGVybWlzc2lv
bkZsYWdzID0gU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JV0dSUCB8IFNfSVJPVEgg
fCBTX0lXT1RIOworCisgICAgb3V0RkQgPSBvcGVuKG5ld1BhdGguZGF0YSgpLCBvdXRNb2RlRmxh
Z3MsIG91dFBlcm1pc3Npb25GbGFncyk7CisgICAgaWYgKG91dEZEIDwgMCkKKyAgICAgICAgZ290
byBjbGVhbnVwOworCisgICAgaW5GRCA9IG9wZW4ob2xkUGF0aC5kYXRhKCksIE9fUkRPTkxZKTsK
KyAgICBpZiAoaW5GRCA8IDApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIGJ5dGVzUmVh
ZCA9IHJlYWQoaW5GRCwgYnVmZmVyLCB2bV9wYWdlX3NpemUpOworICAgIHdoaWxlIChieXRlc1Jl
YWQgPiAwKSB7CisgICAgICAgIGNoYXIqIG91dFBvaW50ZXIgPSBidWZmZXI7CisgICAgICAgIGlu
dCBieXRlc1RvV3JpdGUgPSBieXRlc1JlYWQ7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAg
aW50IGJ5dGVzV3JpdHRlbiA9IHdyaXRlKG91dEZELCBvdXRQb2ludGVyLCBieXRlc1RvV3JpdGUp
OworICAgICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA+PSAwKSB7CisgICAgICAgICAgICAgICAg
b3V0UG9pbnRlciArPSBieXRlc1dyaXR0ZW47CisgICAgICAgICAgICAgICAgYnl0ZXNUb1dyaXRl
IC09IGJ5dGVzV3JpdHRlbjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdv
dG8gY2xlYW51cDsKKyAgICAgICAgfSB3aGlsZSAoYnl0ZXNUb1dyaXRlKTsKKworICAgICAgICBi
eXRlc1JlYWQgPSByZWFkKGluRkQsIGJ1ZmZlciwgdm1fcGFnZV9zaXplKTsKKyAgICB9CisKKyAg
ICAvLyBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSBjb3B5IG9mIHRoZSBmaWxlIGluIHRoZSB0YXJn
ZXQgbG9jYXRpb24uCisgICAgLy8gRGVsZXRlIHRoZSBvcmlnaW5hbCBmaWxlLgorICAgIHN1Y2Nl
c3MgPSAhdW5saW5rKG9sZFBhdGguZGF0YSgpKTsKKworY2xlYW51cDoKKyAgICBpZiAob3V0RkQg
Pj0gMCkKKyAgICAgICAgY2xvc2Uob3V0RkQpOworICAgIGlmIChpbkZEID49IDApCisgICAgICAg
IGNsb3NlKGluRkQpOworCisgICAgLy8gSWYgd2UgZGlkIGNyZWF0ZSB0byB0YXJnZXQgZmlsZSBi
dXQgdGhlIGNvcHkgd2Fzbid0IHN1Y2Nlc3NmdWwsIHdlIHNob3VsZCBkZWxldGUgdGhlIHN0YWxl
IHRhcmdldCBmaWxlLgorICAgIGlmICghc3VjY2VzcyAmJiBvdXRGRCkKKyAgICAgICAgdW5saW5r
KG5ld1BhdGguZGF0YSgpKTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCiBib29sIHJlbmFt
ZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCiB7CiAg
ICAgQ1N0cmluZyBvbGRQYXRoRnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0
aCk7CkBAIC04MSw3ICsxMzgsMTYgQEAgYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0cmluZyYgb2xk
UGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQogICAgIGlmICghbmV3UGF0aEZzUmVwLmRhdGEo
KSB8fCBuZXdQYXRoRnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiAhcmVuYW1lKG9sZFBhdGhGc1JlcC5kYXRhKCksIG5ld1BhdGhGc1Jl
cC5kYXRhKCkpOworICAgIGludCByZXN1bHQgPSByZW5hbWUob2xkUGF0aEZzUmVwLmRhdGEoKSwg
bmV3UGF0aEZzUmVwLmRhdGEoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGVycm5vICE9IEVYREVWKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBUaGUgZmlsZXMgZXhpc3Qgb24gZGlmZmVyZW50IGRldmljZXMgc28gYSBzaW1wbGUg
cmVuYW1lIHdpbGwgbm90IHdvcmsuCisgICAgLy8gV2UgaGF2ZSB0byBjb3B5IGFuZCBkZWxldGUg
dGhlIGZpbGUuCisgICAgcmV0dXJuIG1vdmVGaWxlKG9sZFBhdGhGc1JlcCwgbmV3UGF0aEZzUmVw
KTsKIH0KIAogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwg
RmlsZU9wZW5Nb2RlIG1vZGUpCg==
</data>
<flag name="review"
          id="275748"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250954</attachid>
            <date>2015-04-16 15:26:16 -0700</date>
            <delta_ts>2015-04-16 16:01:27 -0700</delta_ts>
            <desc>Patch v3 - MMAP and tighter permissions</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>4117</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li45YWU4MDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6bW92ZUZpbGUpOiBBdHRl
bXB0IHRvIGNvcHkgdGhlIGZpbGUgdG8gdGhlIHRhcmdldCBsb2NhdGlvbiB0aGVuIHJlbW92ZSB0
aGUgc291cmNlIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogSWYgcmVuYW1l
KCkgZmFpbHMgZHVlIHRvIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBiZWluZyBvbiBkaWZmZXJlbnQg
ZGV2aWNlcywKKyAgICAgICAgICBmYWxsYmFjayB0byBtb3ZlRmlsZSgpLgorCiAyMDE1LTA0LTE1
ICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXgg
RGVidWcgYnVpbGQgZXJyb3IgJ2NvbXBhcmlzb24gb2YgdW5zaWduZWQgZXhwcmVzc2lvbiA+PSAw
IGlzIGFsd2F5cyB0cnVlIFstV2Vycm9yPXR5cGUtbGltaXRzXScKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGU5NDgwNTcuLjI0
NzI4YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0
ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3Rl
bVBPU0lYLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGZubWF0Y2guaD4KICNpbmNs
dWRlIDxsaWJnZW4uaD4KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+
CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRl
IDx1bmlzdGQuaD4KQEAgLTcxLDYgKzcyLDY5IEBAIGJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgpCiAgICAgcmV0dXJuICF1bmxpbmsoZnNSZXAuZGF0YSgpKTsKIH0KIAorc3RhdGlj
IGJvb2wgbW92ZUZpbGUoY29uc3QgQ1N0cmluZyYgb2xkUGF0aCwgY29uc3QgQ1N0cmluZyYgbmV3
UGF0aCkKK3sKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIGludCBvdXRGRCA9IC0x
OworICAgIGludCBpbkZEID0gLTE7CisgICAgdm9pZCogaW5NYXAgPSBNQVBfRkFJTEVEOworICAg
IHZvaWQqIG91dE1hcCA9IE1BUF9GQUlMRUQ7CisgICAgbG9uZyBsb25nIGZpbGVTaXplID0gMDsK
KworICAgIC8vIE9wZW4gdGhlIG91dHB1dCBmaWxlIGZvciByZWFkL3dyaXRlLCBjcmVhdGluZyBp
dCBpZiBpdCBkb2Vzbid0IGV4aXN0LgorICAgIGludCBvdXRNb2RlRmxhZ3MgPSBPX1JEV1IgfCBP
X0NSRUFUOworICAgIC8vIE9ubHkgZ2l2ZSByZWFkL3dyaXRlIHBlcm1pc3Npb25zIHRvIHRoZSB1
c2VyIGZvciB0aGUgb3V0cHV0IGZpbGUuCisgICAgaW50IG91dFBlcm1pc3Npb25GbGFncyA9IFNf
SVJVU1IgfCBTX0lXVVNSOworCisgICAgLy8gT3BlbiB0aGUgaW5wdXQgZmlsZSBhbmQgZ2V0IGl0
cyBzaXplLgorICAgIGluRkQgPSBvcGVuKG9sZFBhdGguZGF0YSgpLCBPX1JET05MWSk7CisgICAg
aWYgKGluRkQgPCAwKQorICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgaWYgKCFnZXRGaWxlU2l6
ZShpbkZELCBmaWxlU2l6ZSkpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIC8vIE9wZW4g
dGhlIG91dHB1dCBmaWxlIGFuZCBzZXQgaXRzIHNpemUgdG8gdGhhdCBvZiB0aGUgaW5wdXQgZmls
ZS4KKyAgICBvdXRGRCA9IG9wZW4obmV3UGF0aC5kYXRhKCksIG91dE1vZGVGbGFncywgb3V0UGVy
bWlzc2lvbkZsYWdzKTsKKyAgICBpZiAob3V0RkQgPCAwKQorICAgICAgICBnb3RvIGNsZWFudXA7
CisgICAgaWYgKGZ0cnVuY2F0ZShvdXRGRCwgZmlsZVNpemUpKQorICAgICAgICBnb3RvIGNsZWFu
dXA7CisKKyAgICAvLyBNYXAgdGhlIHR3byBmaWxlcywgdGhlbiBjb3B5IHRoZSBpbnB1dCBmaWxl
IHRvIHRoZSBvdXRwdXQgZmlsZS4KKyAgICBpbk1hcCA9IG1tYXAobnVsbHB0ciwgZmlsZVNpemUs
IFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgaW5GRCwgMCk7CisgICAgaWYgKGluTWFwID09IE1BUF9G
QUlMRUQpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIG91dE1hcCA9IG1tYXAobnVsbHB0
ciwgZmlsZVNpemUsIFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIG91dEZELCAwKTsKKyAgICBpZiAo
b3V0TWFwID09IE1BUF9GQUlMRUQpCisgICAgICAgIGdvdG8gY2xlYW51cDsKKworICAgIG1lbW1v
dmUob3V0TWFwLCBpbk1hcCwgZmlsZVNpemUpOworICAgIGlmIChtc3luYyhvdXRNYXAsIGZpbGVT
aXplLCBNU19TWU5DKSkKKyAgICAgICAgZ290byBjbGVhbnVwOworCisgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSBoYXZlIGEgY29weSBvZiB0aGUgZmlsZSBpbiB0aGUgdGFyZ2V0IGxvY2F0aW9uLgor
ICAgIC8vIERlbGV0ZSB0aGUgb3JpZ2luYWwgZmlsZS4KKyAgICBzdWNjZXNzID0gIXVubGluayhv
bGRQYXRoLmRhdGEoKSk7CisKK2NsZWFudXA6CisgICAgaWYgKG91dEZEID49IDApCisgICAgICAg
IGNsb3NlKG91dEZEKTsKKyAgICBpZiAoaW5GRCA+PSAwKQorICAgICAgICBjbG9zZShpbkZEKTsK
KyAgICBpZiAoaW5NYXAgIT0gTUFQX0ZBSUxFRCkKKyAgICAgICAgbXVubWFwKGluTWFwLCBmaWxl
U2l6ZSk7CisgICAgaWYgKG91dE1hcCAhPSBNQVBfRkFJTEVEKQorICAgICAgICBtdW5tYXAob3V0
TWFwLCBmaWxlU2l6ZSk7CisKKyAgICAvLyBJZiB3ZSBkaWQgY3JlYXRlIHRoZSB0YXJnZXQgZmls
ZSBidXQgdGhlIGNvcHkgd2Fzbid0IHN1Y2Nlc3NmdWwsIHdlIGRlbGV0ZSB0aGUgc3RhbGUgdGFy
Z2V0IGZpbGUuCisgICAgaWYgKCFzdWNjZXNzICYmIG91dEZEKQorICAgICAgICB1bmxpbmsobmV3
UGF0aC5kYXRhKCkpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKIGJvb2wgcmVuYW1lRmls
ZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKIHsKICAgICBD
U3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsK
QEAgLTgxLDcgKzE0NSwxNiBAQCBib29sIHJlbmFtZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQYXRo
LCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCiAgICAgaWYgKCFuZXdQYXRoRnNSZXAuZGF0YSgpIHx8
IG5ld1BhdGhGc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuICFyZW5hbWUob2xkUGF0aEZzUmVwLmRhdGEoKSwgbmV3UGF0aEZzUmVwLmRh
dGEoKSk7CisgICAgaW50IHJlc3VsdCA9IHJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgpLCBuZXdQ
YXRoRnNSZXAuZGF0YSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBpZiAoZXJybm8gIT0gRVhERVYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIFRoZSBmaWxlcyBleGlzdCBvbiBkaWZmZXJlbnQgZGV2aWNlcyBzbyBhIHNpbXBsZSByZW5h
bWUgd2lsbCBub3Qgd29yay4KKyAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IG1vdmUgdGhlIGZp
bGUuCisgICAgcmV0dXJuIG1vdmVGaWxlKG9sZFBhdGhGc1JlcCwgbmV3UGF0aEZzUmVwKTsKIH0K
IAogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlIG1vZGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250964</attachid>
            <date>2015-04-16 16:01:27 -0700</date>
            <delta_ts>2015-04-16 16:21:45 -0700</delta_ts>
            <desc>Patch v4 - Fallback to NSFileManager</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3869</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li45ZjQ4NzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxl
U3lzdGVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1vdmVGaWxlKTogU3R1YiBpbXBsZW1lbnRh
dGlvbiBmb3Igb3RoZXIgcGxhdGZvcm1zLgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0u
aDoKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6bW92ZUZpbGUpOiBNb3ZlIHRoZSBmaWxlIHVzaW5nIE5TRmlsZU1hbmFnZXIuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cmVuYW1lRmlsZSk6IEZhbGxiYWNrIHRvIG1vdmVGaWxlIGlmIHBhdGhzIGFyZSBv
biBkaWZmZXJlbnQgZGV2aWNlcy4KKwogMjAxNS0wNC0xNSAgSm9vbmdodW4gUGFyayAgPGpoNzE4
LnBhcmtAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgRml4IERlYnVnIGJ1aWxkIGVycm9yICdjb21w
YXJpc29uIG9mIHVuc2lnbmVkIGV4cHJlc3Npb24gPj0gMCBpcyBhbHdheXMgdHJ1ZSBbLVdlcnJv
cj10eXBlLWxpbWl0c10nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCmluZGV4
IDk3Yjg0NmUuLjM3YzRhNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTeXN0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3Bw
CkBAIC05Nyw2ICs5NywxMiBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5n
JiBpbnB1dFN0cmluZykKIAogI2lmICFQTEFURk9STShNQUMpCiAKK2Jvb2wgbW92ZUZpbGUoY29u
c3QgU3RyaW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCit7CisJLy8gRklYTUU6
IE5lZWRzIGltcGwuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzE0MzgzNCBmb3IgaWRlYXMuCisJ
cmV0dXJuIGZhbHNlOworfQorCiB2b2lkIHNldE1ldGFkYXRhVVJMKFN0cmluZyYsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFN0cmluZyYpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmgKaW5kZXggNWUwOWUyOS4uNzEyN2RhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0
ZW0uaApAQCAtMTM4LDYgKzEzOCw3IEBAIFdFQkNPUkVfRVhQT1JUIGJvb2wgZmlsZUV4aXN0cyhj
b25zdCBTdHJpbmcmKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJp
bmcmKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3Ry
aW5nJik7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJlbmFtZUZpbGUoY29uc3QgU3RyaW5nJiBvbGRQ
YXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpOworYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcm
IG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGdl
dEZpbGVTaXplKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmVzdWx0KTsKIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgZ2V0RmlsZVNpemUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcmIHJlc3Vs
dCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0
cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0Zp
bGVTeXN0ZW1NYWMubW0KaW5kZXggOTc4NGM4ZC4uM2MwOTI0NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KQEAgLTY3LDYgKzY3LDE0IEBAIFN0cmlu
ZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFu
ZGxlJiBwbGF0Zm9ybUZpbGVICiAgICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcG9yYXJ5
RmlsZVBhdGguZGF0YSgpKTsKIH0KIAorYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBh
dGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAgICBOU0Vycm9yICplcnJvciA9IG5pbDsK
KyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIG1vdmVJdGVtQXRQYXRoOihOU1N0
cmluZyAqKW9sZFBhdGggdG9QYXRoOihOU1N0cmluZyAqKW5ld1BhdGggZXJyb3I6JmVycm9yXTsK
KworICAgIHJldHVybiAhZXJyb3I7Cit9CisKICNpZiAhUExBVEZPUk0oSU9TKQogCiB2b2lkIHNl
dE1ldGFkYXRhVVJMKFN0cmluZyYgVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBj
b25zdCBTdHJpbmcmIHBhdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9w
b3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgv
RmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCBlOTQ4MDU3Li5mYTY1ZTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTgxLDcg
KzgxLDE2IEBAIGJvb2wgcmVuYW1lRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0
cmluZyYgbmV3UGF0aCkKICAgICBpZiAoIW5ld1BhdGhGc1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZz
UmVwLmRhdGEoKVswXSA9PSAnXDAnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgpLCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKKyAg
ICBpbnQgcmVzdWx0ID0gcmVuYW1lKG9sZFBhdGhGc1JlcC5kYXRhKCksIG5ld1BhdGhGc1JlcC5k
YXRhKCkpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChlcnJubyAhPSBFWERFVikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIHBh
dGhzIGV4aXN0IG9uIGRpZmZlcmVudCBkZXZpY2VzIHNvIGEgc2ltcGxlIHJlbmFtZSB3aWxsIG5v
dCB3b3JrLgorICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgbW92ZSB0aGUgZmlsZS4KKyAgICBy
ZXR1cm4gbW92ZUZpbGUob2xkUGF0aCwgbmV3UGF0aCk7CiB9CiAKIFBsYXRmb3JtRmlsZUhhbmRs
ZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQo=
</data>
<flag name="review"
          id="275768"
          type_id="1"
          status="-"
          setter="andersca"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250971</attachid>
            <date>2015-04-16 16:21:45 -0700</date>
            <delta_ts>2015-04-16 16:23:58 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3450</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li4xYzM2YTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
RmlsZVN5c3RlbUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogTW92ZSB0
aGUgb3JpZ2luYWwgUE9TSVggaW1wbCBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Zp
bGVTeXN0ZW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogSW1wbGVtZW50
IHdpdGggTlNGaWxlTWFuYWdlci4KKworICAgICAgICAqIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0
ZW1QT1NJWC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogRGVsZXRlZC4KKwog
MjAxNS0wNC0xNSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgRml4IERlYnVnIGJ1aWxkIGVycm9yICdjb21wYXJpc29uIG9mIHVuc2lnbmVkIGV4cHJl
c3Npb24gPj0gMCBpcyBhbHdheXMgdHJ1ZSBbLVdlcnJvcj10eXBlLWxpbWl0c10nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAKaW5kZXggYmM1YjlkZS4u
ZDYxOWI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0ZpbGVTeXN0
ZW1FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlU3lzdGVtRWZs
LmNwcApAQCAtMTA4LDQgKzEwOCwxNyBAQCB1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBh
dGgoY29uc3QgY2hhciogcGF0aCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1
Zi5mX2JhdmFpbCkgKiBidWYuZl9ic2l6ZTsKIH0KIAorYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0
cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIENTdHJpbmcgb2xk
UGF0aEZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG9sZFBhdGgpOworICAgIGlmICgh
b2xkUGF0aEZzUmVwLmRhdGEoKSB8fCBvbGRQYXRoRnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgbmV3UGF0aEZzUmVwID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKG5ld1BhdGgpOworICAgIGlmICghbmV3UGF0aEZzUmVwLmRhdGEo
KSB8fCBuZXdQYXRoRnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiAhcmVuYW1lKG9sZFBhdGhGc1JlcC5kYXRhKCksIG5ld1BhdGhGc1Jl
cC5kYXRhKCkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRmlsZVN5c3RlbU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lz
dGVtTWFjLm1tCmluZGV4IDk3ODRjOGQuLmZjZjRhYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCkBAIC02Nyw2ICs2NywxNCBAQCBTdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
cGxhdGZvcm1GaWxlSAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBvcmFyeUZpbGVQ
YXRoLmRhdGEoKSk7CiB9CiAKK2Jvb2wgcmVuYW1lRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgs
IGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IG9sZFVS
TCA9IHBhdGhBc1VSTChvbGRQYXRoKTsKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IG5ld1VSTCA9
IHBhdGhBc1VSTChuZXdQYXRoKTsKKworICAgIHJldHVybiBbW05TRmlsZU1hbmFnZXIgZGVmYXVs
dE1hbmFnZXJdIG1vdmVJdGVtQXRVUkw6KE5TVVJMICopb2xkVVJMLmdldCgpIHRvVVJMOihOU1VS
TCAqKW5ld1VSTC5nZXQoKSBlcnJvcjpuaWxdOworfQorCiAjaWYgIVBMQVRGT1JNKElPUykKIAog
dm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5nJiByZWZl
cnJlciwgY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggZTk0ODA1Ny4uMTJkOWFlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCkBA
IC03MSwxOSArNzEsNiBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQogICAg
IHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKLWJvb2wgcmVuYW1lRmlsZShjb25z
dCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBDU3RyaW5n
IG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsKLSAgICBp
ZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAn
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIG5ld1BhdGhGc1JlcCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBpZiAoIW5ld1BhdGhGc1JlcC5k
YXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgpLCBuZXdQYXRo
RnNSZXAuZGF0YSgpKTsKLX0KLQogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250973</attachid>
            <date>2015-04-16 16:23:58 -0700</date>
            <delta_ts>2015-04-16 16:32:06 -0700</delta_ts>
            <desc>Patch v6</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3360</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li4xYzM2YTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9lZmwv
RmlsZVN5c3RlbUVmbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogTW92ZSB0
aGUgb3JpZ2luYWwgUE9TSVggaW1wbCBoZXJlLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL0Zp
bGVTeXN0ZW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogSW1wbGVtZW50
IHdpdGggTlNGaWxlTWFuYWdlci4KKworICAgICAgICAqIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0
ZW1QT1NJWC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogRGVsZXRlZC4KKwog
MjAxNS0wNC0xNSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtAc2Ftc3VuZy5jb20+CiAKICAg
ICAgICAgRml4IERlYnVnIGJ1aWxkIGVycm9yICdjb21wYXJpc29uIG9mIHVuc2lnbmVkIGV4cHJl
c3Npb24gPj0gMCBpcyBhbHdheXMgdHJ1ZSBbLVdlcnJvcj10eXBlLWxpbWl0c10nCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVmbC5jcHAKaW5kZXggYmM1YjlkZS4u
ZDYxOWI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0ZpbGVTeXN0
ZW1FZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9GaWxlU3lzdGVtRWZs
LmNwcApAQCAtMTA4LDQgKzEwOCwxNyBAQCB1aW50NjRfdCBnZXRWb2x1bWVGcmVlU2l6ZUZvclBh
dGgoY29uc3QgY2hhciogcGF0aCkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGJ1
Zi5mX2JhdmFpbCkgKiBidWYuZl9ic2l6ZTsKIH0KIAorYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0
cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKQoreworICAgIENTdHJpbmcgb2xk
UGF0aEZzUmVwID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG9sZFBhdGgpOworICAgIGlmICgh
b2xkUGF0aEZzUmVwLmRhdGEoKSB8fCBvbGRQYXRoRnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgbmV3UGF0aEZzUmVwID0gZmlsZVN5
c3RlbVJlcHJlc2VudGF0aW9uKG5ld1BhdGgpOworICAgIGlmICghbmV3UGF0aEZzUmVwLmRhdGEo
KSB8fCBuZXdQYXRoRnNSZXAuZGF0YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiAhcmVuYW1lKG9sZFBhdGhGc1JlcC5kYXRhKCksIG5ld1BhdGhGc1Jl
cC5kYXRhKCkpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvRmlsZVN5c3RlbU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lz
dGVtTWFjLm1tCmluZGV4IDk3ODRjOGQuLmYyMDJjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9GaWxlU3lzdGVtTWFjLm1tCkBAIC02Nyw2ICs2NywxMSBAQCBTdHJpbmcgb3Bl
blRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiBwcmVmaXgsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
cGxhdGZvcm1GaWxlSAogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KHRlbXBvcmFyeUZpbGVQ
YXRoLmRhdGEoKSk7CiB9CiAKK2Jvb2wgcmVuYW1lRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgs
IGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKK3sKKyAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRl
ZmF1bHRNYW5hZ2VyXSBtb3ZlSXRlbUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6b2xkUGF0
aF0gdG9VUkw6W05TVVJMIGZpbGVVUkxXaXRoUGF0aDpuZXdQYXRoXSBlcnJvcjpuaWxdOworfQor
CiAjaWYgIVBMQVRGT1JNKElPUykKIAogdm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0
cmluZywgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXgg
ZTk0ODA1Ny4uMTJkOWFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9z
aXgvRmlsZVN5c3RlbVBPU0lYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3Np
eC9GaWxlU3lzdGVtUE9TSVguY3BwCkBAIC03MSwxOSArNzEsNiBAQCBib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9
CiAKLWJvb2wgcmVuYW1lRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYg
bmV3UGF0aCkKLXsKLSAgICBDU3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNl
bnRhdGlvbihvbGRQYXRoKTsKLSAgICBpZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0
aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBD
U3RyaW5nIG5ld1BhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsK
LSAgICBpZiAoIW5ld1BhdGhGc1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9
PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXJlbmFtZShvbGRQ
YXRoRnNSZXAuZGF0YSgpLCBuZXdQYXRoRnNSZXAuZGF0YSgpKTsKLX0KLQogUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7
CiAgICAgQ1N0cmluZyBmc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250977</attachid>
            <date>2015-04-16 16:32:06 -0700</date>
            <delta_ts>2015-04-16 17:54:23 -0700</delta_ts>
            <desc>Patch v7</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>6435</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MmJkMWU3Li40ODM3MTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTUtMDQtMTYgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIENvbXBpbGluZyBhIGNvbnRlbnQgZXh0ZW5zaW9uIGZhaWxzIHdoZW4gdXNlcidzIGhvbWUg
ZGlyZWN0b3J5IGlzIG9uIGEgZGlmZmVyZW50IHZvbHVtZSBmcm9tIC92YXIvdG1wLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzODM0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGQgbW92ZUZpbGUo
KSBmb3IgYSBXSzIgY2FsbCBzaXRlIHRvIHVzZS4KKyAgICAgICAgLSBSZW1vdmUgcmVuYW1lRmls
ZSgpIGFzIGl0IGlzIG5vdyBkZWFkIGNvZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlU3lz
dGVtLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpyZW5hbWVGaWxlKTogRGVsZXRlZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L21hYy9GaWxlU3lzdGVtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6bW92ZUZpbGUpOgorCisg
ICAgICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnJlbmFtZUZpbGUpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL0Zp
bGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVuYW1lRmlsZSk6IERlbGV0ZWQu
CisKIDIwMTUtMDQtMTUgIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJrQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIEZpeCBEZWJ1ZyBidWlsZCBlcnJvciAnY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBl
eHByZXNzaW9uID49IDAgaXMgYWx3YXlzIHRydWUgWy1XZXJyb3I9dHlwZS1saW1pdHNdJwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDVlMDllMjkuLmY1YzNhMmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTEzNyw3ICsxMzcsNyBAQCBzdHJ1Y3Qg
RmlsZU1ldGFkYXRhOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IFN0cmlu
ZyYpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYpOwogV0VC
Q09SRV9FWFBPUlQgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKLVdF
QkNPUkVfRVhQT1JUIGJvb2wgcmVuYW1lRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0
IFN0cmluZyYgbmV3UGF0aCk7CitXRUJDT1JFX0VYUE9SVCBib29sIG1vdmVGaWxlKGNvbnN0IFN0
cmluZyYgb2xkUGF0aCwgY29uc3QgU3RyaW5nJiBuZXdQYXRoKTsKIFdFQkNPUkVfRVhQT1JUIGJv
b2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25nJiByZXN1bHQpOwogV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRGaWxlU2l6ZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyYg
cmVzdWx0KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29u
c3QgU3RyaW5nJiwgdGltZV90JiByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCmluZGV4IGI3MTc2MGEuLmI4ZWIyOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKQEAgLTExMSwxMiArMTEx
LDYgQEAgYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiAgICAg
cmV0dXJuIGZpbGVuYW1lID8gZ19ybWRpcihmaWxlbmFtZS5nZXQoKSkgIT0gLTEgOiBmYWxzZTsK
IH0KIAotYm9vbCByZW5hbWVGaWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29s
IGdldEZpbGVTdGF0KGNvbnN0IFN0cmluZyYgcGF0aCwgR1N0YXRCdWYqIHN0YXRCdWZmZXIpCiB7
CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gZmlsZW5hbWUgPSB1bmVzY2FwZWRGaWxlbmFtZShwYXRo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9GaWxlU3lzdGVtTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVTeXN0ZW1NYWMubW0KaW5kZXgg
OTc4NGM4ZC4uMzczYzNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0ZpbGVTeXN0ZW1NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0ZpbGVT
eXN0ZW1NYWMubW0KQEAgLTY3LDYgKzY3LDExIEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShj
b25zdCBTdHJpbmcmIHByZWZpeCwgUGxhdGZvcm1GaWxlSGFuZGxlJiBwbGF0Zm9ybUZpbGVICiAg
ICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgodGVtcG9yYXJ5RmlsZVBhdGguZGF0YSgpKTsKIH0K
IAorYm9vbCBtb3ZlRmlsZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3
UGF0aCkKK3sKKyAgICByZXR1cm4gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBtb3Zl
SXRlbUF0VVJMOltOU1VSTCBmaWxlVVJMV2l0aFBhdGg6b2xkUGF0aF0gdG9VUkw6W05TVVJMIGZp
bGVVUkxXaXRoUGF0aDpuZXdQYXRoXSBlcnJvcjpuaWxdOworfQorCiAjaWYgIVBMQVRGT1JNKElP
UykKIAogdm9pZCBzZXRNZXRhZGF0YVVSTChTdHJpbmcmIFVSTFN0cmluZywgY29uc3QgU3RyaW5n
JiByZWZlcnJlciwgY29uc3QgU3RyaW5nJiBwYXRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggZTk0ODA1Ny4uMTJkOWFlZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVgu
Y3BwCkBAIC03MSwxOSArNzEsNiBAQCBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KQogICAgIHJldHVybiAhdW5saW5rKGZzUmVwLmRhdGEoKSk7CiB9CiAKLWJvb2wgcmVuYW1lRmls
ZShjb25zdCBTdHJpbmcmIG9sZFBhdGgsIGNvbnN0IFN0cmluZyYgbmV3UGF0aCkKLXsKLSAgICBD
U3RyaW5nIG9sZFBhdGhGc1JlcCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihvbGRQYXRoKTsK
LSAgICBpZiAoIW9sZFBhdGhGc1JlcC5kYXRhKCkgfHwgb2xkUGF0aEZzUmVwLmRhdGEoKVswXSA9
PSAnXDAnKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDU3RyaW5nIG5ld1BhdGhGc1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihuZXdQYXRoKTsKLSAgICBpZiAoIW5ld1BhdGhG
c1JlcC5kYXRhKCkgfHwgbmV3UGF0aEZzUmVwLmRhdGEoKVswXSA9PSAnXDAnKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gIXJlbmFtZShvbGRQYXRoRnNSZXAuZGF0YSgpLCBu
ZXdQYXRoRnNSZXAuZGF0YSgpKTsKLX0KLQogUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgQ1N0cmluZyBmc1Jl
cCA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihwYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRleCBjYmU2ODg5Li5iMmRkOGRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0xNzYs
MTkgKzE3Niw2IEBAIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRo
KQogICAgIHJldHVybiAhIVJlbW92ZURpcmVjdG9yeVcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCkpOwogfQogCi1ib29sIHJlbmFtZUZpbGUoY29uc3QgU3Ry
aW5nJiBvbGRQYXRoLCBjb25zdCBTdHJpbmcmIG5ld1BhdGgpCi17Ci0gICAgQ1N0cmluZyBvbGRQ
YXRoRnNSZXAgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ob2xkUGF0aCk7Ci0gICAgaWYgKCFv
bGRQYXRoRnNSZXAuZGF0YSgpIHx8IG9sZFBhdGhGc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ1N0cmluZyBuZXdQYXRoRnNSZXAgPSBmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb24obmV3UGF0aCk7Ci0gICAgaWYgKCFuZXdQYXRoRnNSZXAuZGF0YSgp
IHx8IG5ld1BhdGhGc1JlcC5kYXRhKClbMF0gPT0gJ1wwJykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgcmV0dXJuIDo6TW92ZUZpbGVBKG9sZFBhdGhGc1JlcC5kYXRhKCksIG5ld1BhdGhG
c1JlcC5kYXRhKCkpOwotfQotCiBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgVmVjdG9yPFVD
aGFyPiBidWZmZXIoTUFYX1BBVEgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDEyYzU4MjMuLmE4MjgxMGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wNC0xNiAgQnJhZHkgRWlkc29uICA8YmVp
ZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ29tcGlsaW5nIGEgY29udGVudCBleHRlbnNpb24g
ZmFpbHMgd2hlbiB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgaXMgb24gYSBkaWZmZXJlbnQgdm9sdW1l
IGZyb20gL3Zhci90bXAuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDM4MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHA6
CisgICAgICAgIChBUEk6OmNvbXBpbGVkVG9GaWxlKTogVXNlIG1vdmVGaWxlKCkgaW5zdGVhZCBv
ZiByZW5hbWVGaWxlKCkKKwogMjAxNS0wNC0xNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTmV0d29yayBDYWNoZTogQWRkIHRocmVhZC1zYWZlIGFjY2Vzc29y
cyBmb3Igc3RvcmFnZSBwYXRocwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9BUElVc2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQVBJVXNlckNvbnRlbnRFeHRlbnNpb25TdG9yZS5jcHAKaW5kZXggOThlN2Yy
OC4uNjJmMWQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElV
c2VyQ29udGVudEV4dGVuc2lvblN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0FQSVVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmUuY3BwCkBAIC0yMjUsNyArMjI1LDcg
QEAgc3RhdGljIHN0ZDo6ZXJyb3JfY29kZSBjb21waWxlZFRvRmlsZShjb25zdCBTdHJpbmcmIGpz
b24sIGNvbnN0IFN0cmluZyYgZmluYWxGaWwKICAgICBpZiAobWFwcGVkRGF0YS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5zaW9uU3RvcmU6OkVycm9yOjpDb21waWxl
RmFpbGVkOwogCi0gICAgaWYgKCFXZWJDb3JlOjpyZW5hbWVGaWxlKHRlbXBvcmFyeUZpbGVQYXRo
LCBmaW5hbEZpbGVQYXRoKSkKKyAgICBpZiAoIVdlYkNvcmU6Om1vdmVGaWxlKHRlbXBvcmFyeUZp
bGVQYXRoLCBmaW5hbEZpbGVQYXRoKSkKICAgICAgICAgcmV0dXJuIFVzZXJDb250ZW50RXh0ZW5z
aW9uU3RvcmU6OkVycm9yOjpDb21waWxlRmFpbGVkOwogCiAgICAgcmV0dXJuIHsgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>