1,17c1,3
< Title: Apache Accumulo Batch Writing and Scanning Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Batch Writing and Scanning Example
> ---
1,17c1,3
< Title: Apache Accumulo Bloom Filter Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Bloom Filter Example
> ---
27c13
<     - version: 1.5.0
---
>     - version: 1.6.0
53c39
<     $ ./bin/accumulo org.apache.accumulo.examples.simple.client.RandomBatchScanner --seed 7 -i instance -z zookeepers -u username -p password -t bloom_test --num 500 --min 0 --max 1000000000 --size 50 --scanThreads 20 --auths exampleVis
---
>     $ ./bin/accumulo org.apache.accumulo.examples.simple.client.RandomBatchScanner --seed 7 -i instance -z zookeepers -u username -p password -t bloom_test --num 500 --min 0 --max 1000000000 --size 50 --batchThreads 20 --auths exampleVis
65c51
<     $ ./bin/accumulo org.apache.accumulo.examples.simple.client.RandomBatchScanner --seed 8 -i instance -z zookeepers -u username -p password -t bloom_test --num 500 --min 0 --max 1000000000 --size 50 -batchThreads 20 -auths exampleVis
---
>     $ ./bin/accumulo org.apache.accumulo.examples.simple.client.RandomBatchScanner --seed 8 -i instance -z zookeepers -u username -p password -t bloom_test --num 500 --min 0 --max 1000000000 --size 50 --batchThreads 20 --auths exampleVis
105c91
<     - version: 1.5.0
---
>     - version: 1.6.0
128c114
<     - version: 1.5.0
---
>     - version: 1.6.0
164c150
<     $ ./bin/accumulo org.apache.accumulo.examples.simple.client.RandomBatchScanner --seed 7 -i instance -z zookeepers -u username -p password -t bloom_test2 --num 500 --min 0 --max 1000000000 --size 50 -scanThreads 20 --auths exampleVis
---
>     $ ./bin/accumulo org.apache.accumulo.examples.simple.client.RandomBatchScanner --seed 7 -i instance -z zookeepers -u username -p password -t bloom_test2 --num 500 --min 0 --max 1000000000 --size 50 --scanThreads 20 --auths exampleVis
1,17c1,3
< Title: Apache Accumulo Bulk Ingest Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Bulk Ingest Example
> ---
19c5
< This is an example of how to bulk ingest data into accumulo using map reduce.
---
> This is an example of how to bulk ingest data into Accumulo using MapReduce.
24c10
< accumulo. Then we verify the 1000 rows are in accumulo.
---
> Accumulo. Then we verify the 1000 rows are in Accumulo.
1,18c1,3
< Title: Apache Accumulo Classpath Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
< 
---
> ---
> title: Classpath Example
> ---
32c17
<     root@test15> config -s general.vfs.context.classpath.cx1=hdfs://<namenode host>:<namenode port>/user1/lib
---
>     root@test16> config -s general.vfs.context.classpath.cx1=hdfs://<namenode host>:<namenode port>/user1/lib
36c21
<     root@test15> createtable nofoo
---
>     root@test16> createtable nofoo
40c25
<     root@test15 nofoo> config -t nofoo -s table.classpath.context=cx1
---
>     root@test16 nofoo> config -t nofoo -s table.classpath.context=cx1
44c29
<     root@test15 nofoo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
---
>     root@test16 nofoo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
50,52c35,37
<     root@test15 nofoo> insert foo1 f1 q1 v1
<     root@test15 nofoo> insert noo1 f1 q1 v2
<     root@test15 nofoo> scan
---
>     root@test16 nofoo> insert foo1 f1 q1 v1
>     root@test16 nofoo> insert noo1 f1 q1 v2
>     root@test16 nofoo> scan
60,61c45,46
<     root@test15 nofoo> createtable nofootwo
<     root@test15 nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
---
>     root@test16 nofoo> createtable nofootwo
>     root@test16 nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
63,64c48,49
<     root@test15 nofootwo> config -t nofootwo -s table.classpath.context=cx1
<     root@test15 nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
---
>     root@test16 nofootwo> config -t nofootwo -s table.classpath.context=cx1
>     root@test16 nofootwo> setiter -n foofilter -p 10 -scan -minc -majc -class org.apache.accumulo.test.FooFilter
1,17c1,3
< Title: Apache Accumulo Client Examples
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Client Examples
> ---
1,17c1,3
< Title: Apache Accumulo Combiner Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Combiner Example
> ---
32c18
<     - version: 1.5.0
---
>     - version: 1.6.0
1,17c1,3
< Title: Apache Accumulo Constraints Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Constraints Example
> ---
34c20
<     - version: 1.5.0
---
>     - version: 1.6.0
1,17c1,3
< Title: Apache Accumulo File System Archive
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: File System Archive
> ---
1,17c1,3
< Title: Apache Accumulo Export/Import Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Export/Import Example
> ---
27,33c13,19
<     root@test15> createtable table1
<     root@test15 table1> insert a cf1 cq1 v1
<     root@test15 table1> insert h cf1 cq1 v2
<     root@test15 table1> insert z cf1 cq1 v3
<     root@test15 table1> insert z cf1 cq2 v4
<     root@test15 table1> addsplits -t table1 b r
<     root@test15 table1> scan
---
>     root@test16> createtable table1
>     root@test16 table1> insert a cf1 cq1 v1
>     root@test16 table1> insert h cf1 cq1 v2
>     root@test16 table1> insert z cf1 cq1 v3
>     root@test16 table1> insert z cf1 cq2 v4
>     root@test16 table1> addsplits -t table1 b r
>     root@test16 table1> scan
38,42c24,28
<     root@test15> config -t table1 -s table.split.threshold=100M
<     root@test15 table1> clonetable table1 table1_exp
<     root@test15 table1> offline table1_exp
<     root@test15 table1> exporttable -t table1_exp /tmp/table1_export
<     root@test15 table1> quit
---
>     root@test16> config -t table1 -s table.split.threshold=100M
>     root@test16 table1> clonetable table1 table1_exp
>     root@test16 table1> offline table1_exp
>     root@test16 table1> exporttable -t table1_exp /tmp/table1_export
>     root@test16 table1> quit
64,66c50,52
<     root@test15> importtable table1_copy /tmp/table1_export_dest
<     root@test15> table table1_copy
<     root@test15 table1_copy> scan
---
>     root@test16> importtable table1_copy /tmp/table1_export_dest
>     root@test16> table table1_copy
>     root@test16 table1_copy> scan
71c57
<     root@test15 table1_copy> getsplits -t table1_copy
---
>     root@test16 table1_copy> getsplits -t table1_copy
74c60
<     root@test15> config -t table1_copy -f split
---
>     root@test16> config -t table1_copy -f split
81c67
<     root@test15> tables -l
---
>     root@test16> tables -l
86c72
<     root@test15 table1_copy> scan -t accumulo.metadata -b 5 -c srv:time
---
>     root@test16 table1_copy> scan -t accumulo.metadata -b 5 -c srv:time
1,17c1,3
< Title: Apache Accumulo File System Archive Example (Data Only)
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: File System Archive Example (Data Only)
> ---
1,17c1,3
< Title: Apache Accumulo Filter Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Filter Example
> ---
1,17c1,3
< Title: Apache Accumulo Hello World Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Hello World Example
> ---
1,18c1,3
< Title: Apache Accumulo Isolation Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
< 
---
> ---
> title: Isolation Example
> ---
1,17c1,3
< Title: Apache Accumulo MapReduce Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: MapReduce Example
> ---
36c22
<     - version: 1.5.0
---
>     - version: 1.6.0
151,154d136
< 
< 
< 
< 
1,17c1,3
< Title: Apache Accumulo MaxMutation Constraints Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: MaxMutation Constraints Example
> ---
30c16
<     - version: 1.5.0
---
>     - version: 1.6.0
43,45c29
< a single row with 10000 columns, which exceeds the memory limit. Depending on the
< amount of Java heap your tserver(s) are given, you may have to increase the number
< of columns provided to see the failure.
---
> a single row with 10000 columns, which exceeds the memory limit:
1,17c1,3
< Title: Apache Accumulo Regex Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Regex Example
> ---
27c13
<     - version: 1.5.0
---
>     - version: 1.6.0
54c40
<     $ hadoop fs -text /tmp/output/part-m-00000
---
>     $ hadoop fs -text /tmp/output/output/part-m-00000
56,57d41
< 
< 
1,17c1,3
< Title: Apache Accumulo Isolation Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Isolation Example
> ---
1,17c1,3
< Title: Apache Accumulo RowHash Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: RowHash Example
> ---
27c13
<     - version: 1.5.0
---
>     - version: 1.6.0
47c33
<     - version: 1.5.0
---
>     - version: 1.6.0
1,17c1,3
< Title: Apache Accumulo Shard Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Shard Example
> ---
1,17c1,3
< Title: Apache Accumulo Table-to-File Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Table-to-File Example
> ---
26c12
<     - version: 1.5.0
---
>     - version: 1.6.0
1,17c1,3
< Title: Apache Accumulo Terasort Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Terasort Example
> ---
1,17c1,3
< Title: Apache Accumulo Visibility, Authorizations, and Permissions Example
< Notice:    Licensed to the Apache Software Foundation (ASF) under one
<            or more contributor license agreements.  See the NOTICE file
<            distributed with this work for additional information
<            regarding copyright ownership.  The ASF licenses this file
<            to you under the Apache License, Version 2.0 (the
<            "License"); you may not use this file except in compliance
<            with the License.  You may obtain a copy of the License at
<            .
<              http://www.apache.org/licenses/LICENSE-2.0
<            .
<            Unless required by applicable law or agreed to in writing,
<            software distributed under the License is distributed on an
<            "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
<            KIND, either express or implied.  See the License for the
<            specific language governing permissions and limitations
<            under the License.
---
> ---
> title: Visibility, Authorizations, and Permissions Example
> ---
