tag:blogger.com,1999:blog-36228486237973264282024-03-20T02:56:03.413-07:00code forumThis blog is my personal how to. I hope it help others also...Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.comBlogger29125tag:blogger.com,1999:blog-3622848623797326428.post-24568579724511484712016-05-29T08:07:00.004-07:002020-07-16T03:16:56.821-07:00Fail Fast And Fail Safe Iterator In Java<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "verdana", sans-serif;">In this
post we will be discussing about fail-fast and fail-safe iterators
present in java.</span><br />
<span style="font-family: "verdana", sans-serif;"><br /></span>
</div>
<span style="font-family: "verdana", sans-serif;"><br /></span>
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; color: #110000; float: none; font-weight: normal; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="font-family: "verdana", sans-serif; margin-left: 0px;"><code class="comments"><span style="font-size: small;"><b><span style="font-family: "verdana", sans-serif;">Sections in this post:</span></b></span> </code></span></span></pre>
<ol style="text-align: left;">
<li><span style="font-family: "verdana", sans-serif;">Concurrent
Modification</span>
</li>
<li><span style="color: #110000; font-family: "verdana", sans-serif;">Fail
Fast Iterator</span>
</li>
<li><span style="color: #110000; font-family: "verdana", sans-serif;">How
Fail Fast Iterator works</span>
</li>
<li><span style="color: #110000; font-family: "verdana", sans-serif;">Fail
Safe Iterator</span>
</li>
<li><span style="color: #110000; font-family: "verdana", sans-serif;">Examples</span>
</li>
<li><span style="color: #110000; font-family: "verdana", sans-serif;">Difference
between fail fast and fail safe iterator</span>
</li>
</ol>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<h4 style="text-align: left;">
<span style="font-family: "verdana", sans-serif;">What is Concurrent
Modification?</span>
</h4>
<span style="font-family: "verdana", sans-serif;">When one or
more threads are iterating over a collection and in between, one of the
thread changes the structure of the collection (either adding the element
to the collection or by deleting the element from the collection or by
updating the value at particular position in the collection) is known as
Concurrent Modification.</span><br />
<br />
<h4 style="text-align: left;">
<span style="font-family: "verdana", sans-serif;">Fail fast Iterator</span>
</h4>
<div>
<span style="font-family: "verdana", sans-serif;">While
iterating through the collection, Fail fast iterators instantly throws
Concurrent Modification Exception if there is structural modification
of the collection. Thus, in the face of concurrent modification, the
iterator fails quickly and cleanly, rather than risking arbitrary,
non-deterministic behavior at an undetermined time in the future.</span>
</div>
<div>
<span style="font-family: "verdana", sans-serif;"><br /></span>
</div>
<span style="font-family: "verdana", sans-serif;"></span><br />
<h4 style="text-align: left;">
<span style="font-family: "verdana", sans-serif;">How Fail Fast
Iterator come to know that the internal structure is modified
?</span>
</h4>
<div>
<span style="font-family: "verdana", sans-serif;">Fail Fast
Iterators read underlying collection object data directly. The internal
data should not be modified while iterating through the collection. To
ensure this it maintains an internal flag "modCount". Iterator
checks the "modCount" flag whenever it gets the next value (using
hasNext() method and next() method). Value of mods flag changes whenever
there is an structural modification. Thus indicating iterator to throw
"ConcurrentModificationException".</span>
</div>
<div>
<span style="font-family: "verdana", sans-serif;"><br /></span>
</div>
<div>
<span style="font-family: "verdana", sans-serif;"></span><br />
<h4 style="font-family: "times new roman";">
<span style="font-family: "verdana", sans-serif;">Fail safe Iterator</span>
</h4>
<span style="font-family: "verdana", sans-serif;"></span><br />
<div>
<span style="font-family: "verdana", sans-serif;">Fail Safe
Iterator makes a copy of the underlying collection object and
iterates over the copied collection object. Any structural modification
done to the iterator affects the copied data structure so, original data
structure remains structurally unchanged. Hence, no
ConcurrentModificationException is thrown by the fail safe
iterator.</span>
</div>
<span style="font-family: "verdana", sans-serif;"></span>
</div>
<div>
<span style="font-family: "verdana", sans-serif;"><br /></span>
</div>
<div>
<span style="font-family: "verdana", sans-serif;"></span><br />
<div>
<span style="font-family: "verdana", sans-serif;">Two
issues associated with Fail Safe Iterator are :</span>
</div>
<span style="font-family: "verdana", sans-serif;"></span><br />
<div>
<ol style="text-align: left;">
<li style="list-style: outside none none;"><span style="font-family: "verdana", sans-serif;"></span>
</li>
<li><span style="font-family: "verdana", sans-serif;">Overhead of maintaining
the copied data structure i.e memory. </span>
</li>
<li><span style="font-family: "verdana", sans-serif;">Fail
safe iterator does not guarantee that the data being read is the latest
data from the underlying original collection object.</span>
</li>
</ol>
<span style="font-family: "verdana", sans-serif;"><br /></span>
<span style="font-family: "verdana", sans-serif;">Lets see a
fail fast iterator example:</span></div>
</div>
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="brush: java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;">import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class FailFastExample
{
public static void main(String[] args)
{
Map<string,String> premiumPhone =
new HashMap<string,String>();
premiumPhone.put("Apple", "iPhone");
premiumPhone.put("HTC", "HTC one");
premiumPhone.put("Samsung","S5");
Iterator iterator = premiumPhone.keySet()
.iterator();
while (iterator.hasNext())
{
System.out.println(premiumPhone.get(
iterator.next()));
premiumPhone.put("Sony", "Xperia Z");
}
}
}</pre>
</div>
</div>
</div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span style="color: black; font-family: "verdana", sans-serif; white-space: normal;">Output:</span> <span style="font-family: "verdana", sans-serif; white-space: normal;">
================================================================</span></pre>
<pre></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"> <span style="font-family: "verdana", sans-serif; white-space: normal;">iPhone </span></pre>
<pre></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"> <span style="font-family: "times new roman";"><span style="font-family: "verdana", sans-serif; white-space: normal;">Exception in thread "main" java.util.ConcurrentModificationException</span></span></pre>
<pre></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"> <span style="font-family: "times new roman";"><span style="font-family: "verdana", sans-serif; white-space: normal;">at java.util.HashMap$HashIterator.nextEntry(Unknown Source)</span></span></pre>
<pre></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"> <span style="font-family: "times new roman";"><span style="font-family: "verdana", sans-serif; white-space: normal;">at java.util.HashMap$KeyIterator.next(Unknown Source)</span></span></pre>
<pre></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"> <span style="font-family: "times new roman";"><span style="font-family: "verdana", sans-serif; white-space: normal;">at FailFastExample.main(FailFastExample.java:20)</span></span></pre>
<pre></pre>
</div>
<div class="code" style="color: #110000; padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"><code class="comments"></code></code></span></span>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<span style="font-family: "verdana", sans-serif;">We can see that
as soon as we try to put a new entry (<span style="background-color: #f9f9f9;"><span style="color: #110000;">"Sony", "Xperia
Z"), fail-fast iterator immediately throws
ConcurrentModificationException.</span></span></span><br />
<span style="font-family: "verdana", sans-serif;"><br /></span>
<span style="font-family: "verdana", sans-serif;">lest's see Fail
Safe Iterator Example now :</span><br />
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="brush: java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;">import java.util.concurrent.ConcurrentHashMap;
import java.util.Iterator;
public class FailSafeExample
{
public static void main(String[] args)
{
Map<string,String> premiumPhone =
new ConcurrentHashMap<string,String>();
premiumPhone.put("Apple", "iPhone");
premiumPhone.put("HTC", "HTC one");
premiumPhone.put("Samsung","S5");
Iterator iterator = premiumPhone.keySet()
.iterator();
while (iterator.hasNext())
{
System.out.println(premiumPhone
.get(iterator.next()));
premiumPhone.put("Sony", "Xperia Z");
}
}
}</pre>
</div>
</div>
</div>
</div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "verdana", sans-serif;"><br /></span>
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-family: "verdana", sans-serif;">Output:</span>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-family: "verdana", sans-serif;">=============================================</span>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-family: "verdana", sans-serif;">S5</span>
</div>
<span style="font-family: "verdana", sans-serif;"></span><br />
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-family: "verdana", sans-serif;">HTC one</span>
</div>
<span style="font-family: "verdana", sans-serif;"></span><br />
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-family: "verdana", sans-serif;">iPhone</span>
</div>
<span style="font-family: "verdana", sans-serif;"></span>
</div>
</div>
<span style="font-family: "verdana", sans-serif;"><br /></span>
<span style="font-family: "verdana", sans-serif;">Below table
summarizes major differences between fail-fast and fail-safe
iterator.</span><br />
<div>
<style type="text/css">
table.tableizer-table {
font-size: 12px;
border: 1px solid #CCC;
font-family: Verdana, Geneva, sans-serif;
}
.tableizer-table td {
padding: 4px;
margin: 3px;
border: 1px solid #CCC;
}
.tableizer-table th {
background-color: #104E8B;
color: #FFF;
font-weight: bold;
}
</style><br />
<table class="tableizer-table">
<thead>
<tr class="tableizer-firstrow">
<th></th>
<th>Fail Fast Iterator</th>
<th>Fail Safe Iterator</th>
</tr>
</thead>
<tbody>
<tr>
<td>Throw ConcurrentModification Exception</td>
<td>Yes</td>
<td>No</td>
</tr>
<tr>
<td>Clone object</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Memory Overhead</td>
<td>No</td>
<td>Yes</td>
</tr>
<tr>
<td>Examples</td>
<td>HashMap,Vector,ArrayList,HashSet</td>
<td>CopyOnWriteArrayList, ConcurrentHashMap<br />
<br />
<br /></td>
</tr>
</tbody>
</table>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-60673519944537525712015-03-10T07:38:00.002-07:002016-05-18T07:15:30.253-07:00Stack of Strings Implemented in Java<div dir="ltr" style="text-align: left;" trbidi="on">
In my previous post we talked about <a href="http://binary-imaginers.blogspot.in/2015/03/stack-implementaion-in-java-using.html" target="_blank">stack implementation using character array</a>.<br />
<br />
In
this post I will be sharing my code for a stack implementation which
can hold String values in other words stack implemented using array
of String in java.<br />
<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li>String Array Based Implementation of stack.</li>
</ol>
</div>
</div>
</div>
</div>
<div id="section1" style="text-align: left;">
<span style="font-weight: normal;"> Let see the code directly as it is self explanatory</span></div>
<div id="section1" style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<pre class="brush: java">public class StackOfStrings {
// Every stack has a maximum capacity i.e. number of objects it can hold,
private static final int CAPACITY = 10;
// Top will always point to most recently added element in stack
//therefore top = -1 implies stack is empty
private int top = -1;
//array to hold stack elemnts.lt is initialized to capacity of stack
private String[] stackArray = new String[CAPACITY];
public static void main(String[] args) {
StackOfStrings stack = new StackOfStrings();
stack.pop();
stack.push("aa");
stack.push("bb");
stack.push("cc");
stack.push("dd");
stack.push("ee");
stack.printStack();
System.out.println("=============================");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
public boolean isEmpty() {
return top == -1;
}
public boolean push(String data) {
// Check if stack is full
// If it is full then we show Stack overflow message
if (isFull()) {
System.out.println("Stack overflow");
return false;
} else {
stackArray[++top] = data;
return true;
}
}
public String pop() {
// Check if stack is empty
// If it is empty then we show Stack underflow message
if (isEmpty()) {
System.out.println("Stack underflow");
} else {
// decrementing top by one to sake second element from top as top
top--;
// we will be returning top+1 value from array
//as we have already made top to point second element in stack
return stackArray[top + 1];
}
return null;
}
public String peek() {
// we implement peek by first popping top element then pushing it back
String element = null;
if (!isEmpty()) {
element = pop();
push(element);
}
return element;
}
public boolean isFull() {
return top == CAPACITY - 1;
}
// this method just gives view of the stack.
// As there are only two operation for stack
// i.e. push and pop so in theory we can never print a stack
// without calling those two methods
public void printStack() {
System.out.print("[");
for (int i = top; i >= 0; i--) {
System.out.print(" " + stackArray[i]);
}
System.out.println(" ]");
}
}</pre>
</div>
</div>
</div>
<div id="section1" style="text-align: left;">
<span style="font-weight: normal;"> If we run the program we will get output like this:</span></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">================================================================================</span></span></pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
Stack underflow<br />
[ ee dd cc bb aa ]<br />
=============================<br />
ee<br />
dd<br />
cc<br />
bb<br />
aa<br />
Stack underflow<br />
null<br />
Stack underflow<br />
null</div>
</div>
</div>
</div>
<h3 id="section1" style="text-align: left;">
</h3>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;"><span style="font-weight: normal;">Please share your
comments if you find anything incorrect, or you want to share more
information about the topic discussed above.</span></span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b>
<span style="font-weight: normal;"><span style="font-weight: normal;"> </span> </span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">For further reading:</span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;"><br /></span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">practice questions on stack </span></b></span></div>
<div style="text-align: left;">
<a href="http://binary-imaginers.blogspot.in/2015/02/stack-implementaion-in-java-using.html" target="_blank"><span style="font-size: small;"><b>S<span style="font-weight: normal;">tack </span></b><span style="font-weight: normal;">Implementation </span><b><span style="font-weight: normal;">using int array</span></b></span></a></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;"><a href="http://binary-imaginers.blogspot.in/2015/03/stack-implementaion-in-java-using.html" target="_blank"><span style="font-size: small;"><b>S<span style="font-weight: normal;">tack </span></b><span style="font-weight: normal;">Implementation </span><b><span style="font-weight: normal;">using char array</span></b></span></a></span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation using link list </span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation by link list node, </span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation using doubly link list </span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation by doubly link list node . </span></b></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">For complete listing see data structure and algorithm page</span></b></span></div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-4170713547612567742015-03-02T07:22:00.000-08:002016-05-18T07:46:45.572-07:00Stack Implementaion in Java Using Character Array<div dir="ltr" style="text-align: left;" trbidi="on">
In my previous post we talked about basic stack terminologies and simple <a href="http://binary-imaginers.blogspot.in/2015/02/stack-implementaion-in-java-using.html" target="_blank">stack implementation using integer array</a>.<br />
<br />
In this post I will be sharing my code for a stack implementation which can hold char values in other words stack implemented using char array in java.<br />
<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="content" gt="" span="" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span> </pre>
<ol style="text-align: left;">
<li><pre class="content" gt="" span="" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;">char Array Based Implementation of stack. </pre>
</li>
</ol>
</div>
</div>
</div>
</div>
<div id="section1" style="text-align: left;">
<span style="font-weight: normal;"> Let see the code directly as it is self explanatory</span></div>
<div id="section1" style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<pre class="brush: java">public class StackUsingCharArray {
// Every stack has a maximum capacity i.e. number of objects it can hold,
private static final int CAPACITY = 10;
// Top will always point to most recently added element in stack therefore
// top = -1 implies stack is empty
private int top = -1;
//array to hold stack elemnts.lt is initialized to capacity of stack
private char[] stackArray = new char[CAPACITY];
public static void main(String[] args) {
StackUsingCharArray stack = new StackUsingCharArray();
stack.pop();
stack.push('a');
stack.push('b');
stack.push('c');
stack.push('d');
stack.push('e');
stack.printStack();
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
public boolean isEmpty() {
return top == -1;
}
public boolean push(char data) {
//Check if stack is full
//If it is full then we show Stack overflow message
if(isFull()) {
System.out.println("Stack overflow");
return false;
}
else {
stackArray[++top] =data;
return true;
}
}
public Character pop() {
// Check if stack is empty
//If it is empty then we show Stack underflow message
if(isEmpty()) {
System.out.println("Stack underflow");
return null;
}
else {
//decrementing top by one to make second element from top as top element
top --;
//we will be returning top+1 value from array as we have already made
//top to point second element in stack
return stackArray[top+1];
}
}
public Character peek() {
// we implement peek by first popping top element then pushing it back
Character element = null ;
if(!isEmpty()){
element = pop();
push(element);
}
return element;
}
// this method just gives view of the stack.
//As there are only two operation for stack i.e. push and pop
//so in theory we can never print a stack
//without calling those two methods
public void printStack() {
System.out.print("[");
for(int i = top; i>=0;i--){
System.out.print(" "+stackArray[i]);
}
System.out.println(" ]");
}
public boolean isFull() {
return top == CAPACITY -1;
}
}
</pre>
</div>
</div>
</div>
<div id="section1" style="text-align: left;">
<span style="font-weight: normal;"> If we run the program we will get output like this:</span></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">================================================================================</span></span></pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
Stack underflow<br />
[ e d c b a ]<br />
e<br />
d<br />
c<br />
b<br />
a<br />
Stack underflow<br />
null<br />
Stack underflow<br />
null</div>
</div>
</div>
</div>
<h3 id="section1" style="text-align: left;">
</h3>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;"><span style="font-weight: normal;">Please share your
comments if you find anything incorrect, or you want to share more
information about the topic discussed above.</span></span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b>
<span style="font-weight: normal;"><span style="font-weight: normal;"> </span> </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">For further reading:</span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;"><br /></span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">practice questions on stack </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<a href="http://binary-imaginers.blogspot.in/2015/02/stack-implementaion-in-java-using.html" target="_blank"><span style="font-size: small;"><b>S<span style="font-weight: normal;">tack </span></b><span style="font-weight: normal;">Implementation </span><b><span style="font-weight: normal;">using int array</span></b></span></a></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<a href="http://binary-imaginers.blogspot.in/2015/03/stack-of-strings-implemented-in-java.html" target="_blank"><span style="font-size: small;"><b><span style="font-weight: normal;"><span style="font-size: small;"><b>S<span style="font-weight: normal;">tack </span></b><span style="font-weight: normal;">Implementation </span><b><span style="font-weight: normal;">using array </span></b></span>of strings</span></b></span></a></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation using link list </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation by link list node, </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation using doubly link list </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation by doubly link list node . </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">For complete listing see data structure and algorithm page</span></b></span></div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-18934380994467268012015-02-18T09:15:00.002-08:002016-05-18T08:03:21.325-07:00Stack Implementaion in Java Using Integer Array<div dir="ltr" style="text-align: left;" trbidi="on">
This is my first post on stack data structure. In this post I am sharing my code of a simple Stack of integers which is internally implemented using integer array.<br />
<br />
<h3 style="text-align: left;">
<b>Stack</b></h3>
<div style="text-align: left;">
A stack is a basic data structure that can be logically thought as
linear structure represented by a real physical stack or pile, a
structure where insertion and deletion of items takes place at one end
called top of the stack. The basic concept can be illustrated by
thinking of your data set as a stack of plates or books where you can
only take the top item off the stack in order to remove things from it. </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<img alt="Data stack.svg" data-file-height="281" data-file-width="391" src="http://upload.wikimedia.org/wikipedia/commons/thumb/2/29/Data_stack.svg/391px-Data_stack.svg.png" height="281" width="391" /> </div>
<div style="text-align: left;">
<br /></div>
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li><code></code>Basic stack operations. </li>
<ul>
<li>Push and Pop</li>
<li>peek</li>
<li>is Full and is Empty </li>
</ul>
<li>My Stack Interface.</li>
<li>Array Based Implementation.</li>
</ol>
</div>
</div>
</div>
</div>
<h3 id="section1" style="text-align: left;">
Basic stack Operations:</h3>
<h4 id="section1" style="text-align: left;">
</h4>
<h4 id="section1" style="text-align: left;">
<span style="font-size: small;">Push and Pop</span></h4>
<h4 id="section1" style="text-align: left;">
</h4>
<div id="section1" style="text-align: left;">
A stack has two fundamental operations - Push and Pop.</div>
The <b>Push</b> operation stores something on the top of the stack and the <b>Pop</b> operation retrives something from the top of the stack.<b> </b><br />
<br />
<h4 style="text-align: left;">
<span style="font-size: small;"><b>Peek</b></span></h4>
<h4 style="text-align: left;">
<b> </b> </h4>
<div style="text-align: left;">
Peek operation returns top element from the stack without removing it from the stack. Peek is not a fundamental stack operation but it is usually implemented in stack ADT. <br />
<br /></div>
<div style="text-align: left;">
<h4 style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"><b>Is Empty and Is Full</b> </span><span style="font-weight: normal;"> </span></span></h4>
<h4 style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></h4>
<div style="text-align: left;">
When stack is empty and pop operation is called then stack should throw "Stack underflow error" and if stack is already full and pop operation is called then we should throw "Stack overflow error".</div>
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
So as to avoid these two errors we implement Is Empty and Is Full methods. Similar to peek, "Is Empty" and "Is Full" are also not fundamental stack operation.<br />
<br />
<h3 id="section1" style="text-align: left;">
My Stack Interface<span style="font-weight: normal;"> </span></h3>
<span style="font-weight: normal;">I am creating Stack interface for my Stack ADT. Lets see the code:</span><br />
<br /></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="brush: java">public interface StackInterface {
//Method to push data onto stack
public boolean push(int data);
//Method to pop topmost element from stack or most recently added element in stack
public Integer pop();
// This is not a basic stack operation
// This method should allow a user to see the top most element in stack
// it is similar to popping and pushing element again.
public Integer peek();
//method should return true if stack is empty else false
public boolean isEmpty();
//Method should return true if stack is full else false
public boolean isFull();
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<h3 id="section1" style="text-align: left;">
Array Based Implementation</h3>
<div id="section1" style="text-align: left;">
In an array-based implementation we maintain the following fields:</div>
<ol style="text-align: left;">
<li> an array A of a default size
(≥ 1), </li>
<li>the variable <i>top</i> that refers to the top
element in the stack and</li>
<li> the <i>capacity</i> that refers to the array size. </li>
</ol>
We say that a stack is
empty when <code>top = -1</code>, and the stack is full when <code>top = capacity-1</code>. The variable <i>top</i> changes from -1 to <code>capacity - 1</code>.<br />
<div>
<div id="section1" style="text-align: left;">
</div>
<div id="section1" style="text-align: left;">
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Stacks%20and%20Queues/pix/array_stack.bmp" height="105" width="200" /> </div>
<div id="section1" style="text-align: left;">
<br /></div>
<div id="section1" style="text-align: left;">
Below is my code for implementing integer stack using array:</div>
<div id="section1" style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="brush: java">public class StackUsingIntArray implements StackInterface {
// Every stack has a maximum capacity i.e. number of objects it can hold.
private static final int CAPACITY = 10;
//Top will always point to most recently added element in stack therefore
//top * -1 implies stack is empty
private int top = -1;
// array to hold stack elemnts.lt is initialized to capacity of stack
private int[] stackArray = new int[CAPACITY];
@Override
public boolean push(int data) {
//Check if stack is fullIf it is full then we show Stack overflow message
if (isFull()) {
System.out.println("Stack overflow");
return false;
} else {
stackArray[++top] = data;
return true;
}
}
@Override
public Integer pop() {
//Check if stack is empty If it is empty then we show Stack underflow message
if (isEmpty()) {
System.out.println("Stack underflow");
} else {
//decrementing top by one to make second element from top as top
top--;
//we will be returning top+1 value from array as we have already
//made top to point second element in stack
return (Integer) stackArray[top + 1];
}
return null;
}
@Override
public Integer peek() {
// we implement peek by first popping top element then pushing it back
Integer element = null;
if (!isEmpty()) {
element = pop();
push(element);
}
return element;
}
@Override
public boolean isEmpty() {
return top == -1;
}
@Override
public boolean isFull() {
return top == CAPACITY-1;
}
//This method just gives view of the stack. As there are only two operation
//for stack i.e. push and pop so in theory we can never print a stack
//without calling those two methods
public void printStack() {
System.out.print("[");
for (int i = top; i >= 0; i--) {
System.out.print(" " + stackArray[i]);
}
System.out.print(" ]");
}
public static void main(String[] args) {
StackUsingIntArray stack = new StackUsingIntArray();
stack.pop();
stack.push(40);
stack.pop();
stack.push(50);
stack.pop();
stack.push(50);
stack.push(11);
stack.pop();
stack.push(50);
stack.push(32);
stack.pop();
stack.pop();
stack.push(55);
stack.pop();
stack.push(68);
stack.pop();
stack.push(75);
stack.push(-12);
stack.printStack();
System.out.println();
System.out.println("=============================");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.printStack();
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
If we run the program we will get output like this:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">================================================================================</span></span></pre>
Stack underflow<br />
[ -12 75 50 ]<br />
====================</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
-12<br />
75<br />
50<br />
Stack underflow<br />
null<br />
Stack underflow<br />
null<br />
Stack underflow<br />
null<br />
Stack underflow<br />
null<br />
[ 5 4 3 2 1 ]</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h3 style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"></span></span></h3>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;">Please share your
comments if you find anything incorrect, or you want to share more
information about the topic discussed above.</span></span></span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"><span style="font-size: small;"><span style="font-weight: normal;"> </span></span> </span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;">For further reading:</span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></div>
<div style="text-align: left;">
<a href="http://binary-imaginers.blogspot.in/2015/03/stack-implementaion-in-java-using.html" target="_blank"><span style="font-size: small;"><b>S<span style="font-weight: normal;">tack </span></b><span style="font-weight: normal;">Implementation </span><b><span style="font-weight: normal;">using <b>char</b> array</span></b></span></a></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<a href="http://binary-imaginers.blogspot.in/2015/03/stack-of-strings-implemented-in-java.html" target="_blank"><span style="font-size: small;"><b><span style="font-weight: normal;"><span style="font-size: small;"><b>S<span style="font-weight: normal;">tack </span></b><span style="font-weight: normal;">Implementation </span><b><span style="font-weight: normal;">using array </span></b></span>of strings</span></b></span></a></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation using link list </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation by link list node, </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation using doubly link list </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">Stack implementation by doubly link list node . </span></b></span></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><b><span style="font-weight: normal;">For complete listing see data structure and algorithm page</span></b></span></div>
<div style="text-align: left;">
<br /></div>
<h3 style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;"> </span></span> </h3>
<div id="section1" style="text-align: left;">
<br /></div>
<div id="section1" style="text-align: left;">
<br /></div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-55749238493362303582015-02-16T07:32:00.003-08:002016-10-05T23:27:01.161-07:00Data structure Questions on Link List<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: left;">
</div>
<br />
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">In my previous posts we talked about <a href="http://binary-imaginers.blogspot.in/2014/02/link-list-implementation-in-java.html" target="_blank">single link list</a>, <a href="http://binary-imaginers.blogspot.in/2014/02/doubly-link-list-in-java.html" target="_blank">doubly link list</a>. In this post I am sharing my code solution for few practice question which are also frequently asked in interviews too.</span></span></div>
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span style="font-family: "verdana" , sans-serif;"><span style="font-size: small;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments">S<span style="font-family: "verdana" , sans-serif;">ection in this post:</span></code></span></span></span></span></pre>
<ol style="text-align: left;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<li><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><a href="http://binary-imaginers.blogspot.in/2015/02/data-structure-questions-on-link-list.html#section1"><code></code>Get Nth node value from end of link list. </a></span></span></li>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<li><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><a href="http://binary-imaginers.blogspot.in/2015/02/data-structure-questions-on-link-list.html#section2">Print middle node value.</a></span></span></li>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<li><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><a href="http://binary-imaginers.blogspot.in/2015/02/data-structure-questions-on-link-list.html#section3">Get number of occurrence of a number in link list.</a></span></span></li>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<li><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><a href="http://binary-imaginers.blogspot.in/2015/02/data-structure-questions-on-link-list.html#section4">Detect loop and print node where loop is present in link list using <b>Floyd Cycle-Finding Algorithm</b>:</a></span></span></li>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<li><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><a href="http://binary-imaginers.blogspot.in/2015/02/data-structure-questions-on-link-list.html#section5">Detect loop using <b>Richard Brent's algorithm</b>:</a></span></span></li>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
<h3 id="section1" style="text-align: left;">
Get Nth node value from end of link list</h3>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Given a Linked List and a number n, we need to write a method that returns the value at the nth node from end of the Linked List.</span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Solution: We maintain two references say First and Second. First we move First
to n nodes from head.After that we move both references one by one until First
reaches end. Now Second will point to nth node from the
end.</span></span></div>
<div style="text-align: left;">
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Lets see in the code now:</span></span></div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<span style="font-size: normal;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<span style="font-size: normal;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<span style="font-size: normal;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<pre class="brush:java" name="code">
public class LinkListPrograms {
//Refer my link list post for link list implementation details
SLL myList = new SLL();
public static void main(String[] args) {
LinkListPrograms myProg = new LinkListPrograms();
myProg.myList.insert(new Node(11),1);
myProg.myList.insert(new Node(42),2);
myProg.myList.insert(new Node(43),1);
myProg.myList.insert(new Node(44),1);
myProg.myList.insert(new Node(45),2);
myProg.myList.insert(51,1);
myProg.myList.insert(52,2);
myProg.myList.insert(53,1);
myProg.myList.insert(54,1);
myProg.myList.insert(55,2);
myProg.myList.insert(56,4);
myProg.myList.insertAtStart(1);
myProg.myList.insertAtStart(2);
myProg.myList.insertAtStart(3);
myProg.myList.insertAtStart(4);
myProg.myList.insertAtStart(new Node(11));
myProg.myList.insertAtStart(new Node(12));
myProg.myList.insertAtStart(new Node(13));
myProg.myList.insertAtStart(new Node(14));
myProg.myList.printList(myProg.myList.getHead());
System.out.println("Nth element form last is: "+myProg.getNthFromLast(5));
}
public Integer getNthFromLast(int n) {
// Check if list is already Empty
if (myList.isEmpty()) {
System.out.println("List is empty returning null;");
return null;
}
Node firstNode, secondNode;
firstNode = secondNode = myList.getHead();
for (int i = 0; i < n; i++) {
firstNode = firstNode.getNext();
if (firstNode == null) {
System.out.println("invalid number given returning null");
return null;
}
}
while (firstNode != null) {
firstNode = firstNode.getNext();
secondNode = secondNode.getNext();
}
return secondNode.getData();
}
}</pre>
<span style="font-size: normal;"><span style="font-family: "verdana" , sans-serif;"> </span></span>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">If we run the program we will get output like this:</span></span><br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></span></span></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="color: #38761d;"><span class="pln">========================================================================</span></span></span></span></pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">List is: [ 14 13 12 11 4 3 2 1 54 55 53 56 51 52 44 45 43 11 42 ]</span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Nth element form last is: 44</span></span></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<div style="text-align: left;">
</div>
<h3 style="text-align: left;">
</h3>
<h3 id="section2" style="text-align: left;">
<span style="font-family: "verdana" , sans-serif;">Print middle node value</span><span style="font-size: small;"> </span></h3>
<h3 style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="font-weight: normal;"><span style="font-size: x-small;">We traverse linked list using two pointers. Moving one pointer by one and
other pointer by two. When the fast pointer reaches end slow pointer
will reach middle of the linked list.</span></span></span></span></h3>
<div style="text-align: left;">
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Lets see the code now:</span></span></div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<pre class="brush:java" name="code">
public class LinkListPrograms {
//Refer my link list post for link list implementation details
SLL myList = new SLL();
public static void main(String[] args) {
LinkListPrograms myProg = new LinkListPrograms();
myProg.myList.insert(new Node(11),1);
myProg.myList.insert(new Node(42),2);
myProg.myList.insert(new Node(43),1);
myProg.myList.insert(new Node(44),1);
myProg.myList.insert(new Node(45),2);
myProg.myList.insert(51,1);
myProg.myList.insert(52,2);
myProg.myList.insert(53,1);
myProg.myList.insert(54,1);
myProg.myList.insert(55,2);
myProg.myList.insert(56,4);
myProg.myList.insertAtStart(1);
myProg.myList.insertAtStart(2);
myProg.myList.insertAtStart(3);
myProg.myList.insertAtStart(4);
myProg.myList.insertAtStart(new Node(11));
myProg.myList.insertAtStart(new Node(12));
myProg.myList.insertAtStart(new Node(13));
myProg.myList.insertAtStart(new Node(14));
myProg.myList.printList(myProg.myList.getHead());
myProg.printMiddle();
}
/* method to get the middle of the linked list */
public void printMiddle() {
/*
* We will Traverse linked list using two reference namely fastRef and
* slowRef Move one first by one and other by two.When the fast ref
* reaches end slow ref will reach middle of the linked listCheck if
* list is already Empty
*/
if (myList.isEmpty()) {
System.out.println("List is empty");
}
Node fastRef, slowRef;
fastRef = slowRef = myList.getHead();
while (fastRef != null && fastRef.getNext() != null) {
fastRef = fastRef.getNext().getNext();
slowRef = slowRef.getNext();
}
System.out.println("Middle node is: " + slowRef.getData());
}
}</pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"> </span></span>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">If we run the program we will get output like this:</span></span><br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></span></span></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="color: #38761d;"><span class="pln">========================================================================</span></span></span></span></pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">List is: [ 14 13 12 11 4 3 2 1 54 55 53 56 51 52 44 45 43 11 42 ]</span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Middle node is: 55</span></span></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
<div style="text-align: left;">
</div>
<h3 style="text-align: left;">
</h3>
<h3 id="section3" style="text-align: left;">
<span style="font-family: "verdana" , sans-serif;">Get number of occurrence of a number in link list </span></h3>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="font-weight: normal;">We are require to find how many time a number is present in the list<span style="color: #110000;">.</span></span></span></span></div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Lets see the code now:</span></span></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<pre class="brush:java" name="code">
public class LinkListPrograms {
//Refer my link list post for link list implementation details
SLL myList = new SLL();
public static void main(String[] args) {
LinkListPrograms myProg = new LinkListPrograms();
myProg.myList.insert(new Node(11),1);
myProg.myList.insert(new Node(42),2);
myProg.myList.insert(new Node(43),1);
myProg.myList.insert(new Node(44),1);
myProg.myList.insert(new Node(45),2);
myProg.myList.insert(51,1);
myProg.myList.insert(52,2);
myProg.myList.insert(53,1);
myProg.myList.insert(54,1);
myProg.myList.insert(55,2);
myProg.myList.insert(56,4);
myProg.myList.insertAtStart(1);
myProg.myList.insertAtStart(2);
myProg.myList.insertAtStart(3);
myProg.myList.insertAtStart(4);
myProg.myList.insertAtStart(new Node(11));
myProg.myList.insertAtStart(new Node(12));
myProg.myList.insertAtStart(new Node(13));
myProg.myList.insertAtStart(new Node(14));
myProg.myList.printList(myProg.myList.getHead());
System.out.println("occurrence is: "+myProg.getOccurrence(11));
}
/*
* Counts the no. of occurrences of a node (search_for) in a linked list
* (head)
*/
Integer getOccurrence(int numTosearchFor) {
// Check if list is already Empty
if (myList.isEmpty()) {
System.out.println("List is empty returning null;");
return null;
}
Node currentNode = myList.getHead();
int count = 0;
while (currentNode != null) {
if (currentNode.getData() == numTosearchFor) {
count++;
}
currentNode = currentNode.getNext();
}
return count;
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">If we run the program we will get output like this:</span></span><br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></span></span></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="color: #38761d;"><span class="pln">========================================================================</span></span></span></span></pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">List is: [ 14 13 12 11 4 3 2 1 54 55 53 56 51 52 44 45 43 11 42 ]</span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">occurrence is: 2</span></span></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<div style="text-align: left;">
<br /></div>
<h3 id="section4" style="text-align: left;">
<span style="font-family: "verdana" , sans-serif;">Floyd's Cycle-Finding Algorithm</span></h3>
<div id="section4" style="text-align: left;">
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Floyd's cycle-finding algorithm<span style="font-weight: normal;">, also called the "tortoise and the hare algorithm" </span>is a pointer algorithm that uses only two pointers, which move through the sequence at different speeds.</span></span></div>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"> </span></span> </div>
<div id="section4" style="text-align: left;">
<img alt="" height="311" src="data:image/png;base64,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" width="320" /></div>
<div id="section4" style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Traverse linked list using two pointers.
Move one pointer by one and other pointer by two. If these pointers
meet at some node then there is a loop. If pointers do not meet then
linked list doesn’t have loop. </span></span></div>
<div style="text-align: left;">
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Lets see the code now:</span></span></div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<pre class="brush:java" name="code">
public class LinkListPrograms {
//Refer my link list post for link list implementation details
SLL myList = new SLL();
public static void main(String[] args) {
LinkListPrograms myProg = new LinkListPrograms();
myProg.myList.insert(new Node(11),1);
myProg.myList.insert(new Node(42),2);
myProg.myList.insert(new Node(43),1);
myProg.myList.insert(new Node(44),1);
myProg.myList.insert(new Node(45),2);
myProg.myList.insert(51,1);
myProg.myList.insert(52,2);
myProg.myList.insert(53,1);
myProg.myList.insert(54,1);
myProg.myList.insert(55,2);
myProg.myList.insert(56,4);
myProg.myList.insertAtStart(1);
myProg.myList.insertAtStart(2);
myProg.myList.insertAtStart(3);
myProg.myList.insertAtStart(4);
/*
* Adding two nodes to make a cycle
*/
Node nodeForLoop1 = new Node(22);
Node nodeForLoop2 = new Node(23);
nodeForLoop2.setNext(nodeForLoop1);
myProg.myList.insertAtEnd(nodeForLoop1);
myProg.myList.insertAtEnd(nodeForLoop2);
}
/* Floyd's Cycle-Finding Algorithm */
public boolean detectloop() {
/*
* The fastest way to detect the loop is to use Floyd's Cycle-Finding
* Algorithm Move one pointer by one and other pointer by two. If these
* pointers meet at some node then there is a loop. If pointers do not
* meet then linked list doesn't have loop.
*/
// Check if list is already Empty
if (myList.isEmpty()) {
System.out.println("List is empty returning false:");
return false;
}
Node fastRef, slowRef;
fastRef = slowRef = myList.getHead();
while (fastRef != null && fastRef.getNext() != null) {
fastRef = fastRef.getNext().getNext();
slowRef = slowRef.getNext();
if (slowRef == fastRef) {
//Below method will print node where cycle is present
getLoopStart(slowRef, fastRef);
return true;
}
}
return false;
}
private void getLoopStart(Node slowRef, Node fastRef) {
/*
* Move slowRef to Head. Keep fastRef at Meeting Point. Each are k steps
* /* from the Loop Start. If they move at the same pace, they must *
* meet at Loop Start.
*/
slowRef = myList.getHead();
while (slowRef != fastRef) {
slowRef = slowRef.getNext();
fastRef = fastRef.getNext();
}
// Now n2 points to the start of the loop.
System.out.println("loop at: " + fastRef.getData());
}
}</pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"> </span></span>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">If we run the program we will get output like this:</span></span><br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></span></span></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="color: #38761d;"><span class="pln">============================================================================</span></span></span></span></pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">loop at: 22</span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Is loop present: true</span></span></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
</h3>
<h3 id="section5" style="text-align: left;">
<span style="font-family: "verdana" , sans-serif;">Richard Brent's Cycle-Finding Algorithm</span></h3>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">In 1980, Brent invented an algorithm that not only worked in linear time, but required less stepping than Floyd's Tortoise and the Hare algorithm (however it is slightly more complex). </span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Brent's algorithm features a moving rabbit and a stationary, then
teleporting, turtle. Both turtle and rabbit start at the top of the
list. The rabbit takes one step per iteration. If it is then at the same
position as the stationary turtle, there is obviously a loop. If it
reaches the end of the list, there is no loop.</span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Of course, this by itself will take infinite time if there <i>is</i>
a loop. So every once in a while, we teleport the turtle to the
rabbit's position, and let the rabbit continue moving. We start out
waiting just 2 steps before teleportation, and we double that each time
we move the turtle.</span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Why move the turtle at all? Well, the loop might not include the
entire list; if a rabbit gets stuck in a loop further down, without the
turtle, it will go forever. Why take twice as long each time?
Eventually, the length of time between teleportations will become longer
than the size of the loop, and the turtle will be there waiting for the
rabbit when it gets back.</span></span></div>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Note that like <a href="http://binary-imaginers.blogspot.in/2015/02/data-structure-questions-on-link-list.html#section4">Floyd's Tortoise and Hare algorithm</a>, this one runs in
O(N). However you're doing less stepping than with Floyd's (in fact the
upper bound for steps is the number you would do with Floyd's
algorithm). According to Brent's research, his algorithm is 24-36% faster on average for implicit linked list algorithms.</span></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<img alt="" height="400" src="data:image/png;base64,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Rf369dUdWzZu3Chq1aolbGxsxLhx49SdREqbXzRLQECAkMlkws7OTmPukrLosn5+fr749ttvha+vr7C0tBQKhUJ4e3uL1atXF+olWrSd0raraX8WbaOkDkMFlbTczp07hYeHh5DL5cLX11dER0eX2rGnaI6Cy2RlZYkZM2YIFxcXIZfLRYMGDcS8efNETk6Oxu2b8/7XBTsWlZ1MiAJjTRGZKZlMhtDQUIwYMULqKKRFTk4O7OzskJWVJXUU0iIsLAyBgYFgWdAdT+cSUYVITEzE4MGDpY5BZFAsokRUIZo1a4bffvtN6hhEBsUiSkREpCcWUSIiIj2xiBIREemJRZSIiEhPLKJERER6YhElIiLSE4soERGRnlhEiYiI9MQiSkREpCcWUSIiIj2xiBIREemJRZSIiEhPLKJERER6YhElIiLSE4soERGRnlhEiYiI9KSQOgCRoURERECpVEodg8hsRURESB3B7MiEEELqEETlJZPJpI5AVGmwLOiOR6JUKfCP3vQFBgYCAEJDQyVOQmQ4vCZKRESkJxZRIiIiPbGIEhER6YlFlIiISE8sokRERHpiESUiItITiygREZGeWESJiIj0xCJKRESkJxZRIiIiPbGIEhER6YlFlIiISE8sokRERHpiESUiItITiygREZGeWESJiIj0xCJKRESkJxZRIiIiPbGIEhER6YlFlIiISE8sokRERHpiESUiItITiygREZGeWESJiIj0xCJKRESkJxZRIiIiPbGIEhER6YlFlIiISE8sokRERHpiESUiItITiygREZGeWESJiIj0xCJKRAaRlpaGxMREvddPTExEWlqaARMRGR+LKBEZhLOzM1atWqVXIUxLS8OqVavg7OxshGRExsMiSkQGM2jQILz22mtIT0/XeZ309HS89tprGDRokBGTERkHiygRGUzXrl1x584d2NnZITs7u9C8zMxMZGZmFpqWnZ0NOzs73LlzB127dq3ApESGwSJKRAY1cOBAAIC/vz+EEOrpW7ZswZYtW9SvhRDw9/cvtA6RuZGJgr/lRETllJubC6VSCQCYOXMmFi5cCACQyWQAoC6sH330ERYtWgQAyMnJgUKhkCAtUfnwSJSIDEqhUGDp0qUAgEWLFqm/L2jp0qXqArp06VIWUDJbPBIlIoN7+PAh6tati4yMDMhkMvz666946623AAAbNmzA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D+rWrYuUlBQ0aNCgQnIsWrSoQrZDpKtHjx7xdG4ZeXl5wd7eHtHR0WjRooXUccyeyR+JymQyREVFwd/fH5aWlnB1dcX69evV83NzcxESEgInJydYW1ujV69eSEhIUK+7e/du+Pj4YMyYMep1tmzZAk9PTygUCrRq1Qo7duwotL2tW7eic+fOUCqVqF+/PrZu3Yply5ahZs2asLOzw/z58wtlLK09bflVp0+9vLzKfApb9d93wWHTjhw5gq5du8LW1hZKpRK+vr6IiooqtN6GDRtQp04dWFtb480338Tjx491nq86naspd1U7DU+m4cmTJzwSLSO5XI6WLVvi/PnzUkepFEy+iAJAcHAwgoODkZiYiLfeegvvvPMOHj58CACYN28efv/9d4SHh+P48eOwtLRE//791ac5P/zwQ4waNUo9yPWxY8fw9ttvY+7cubhw4QJ69uyJgQMHYv/+/ertzZs3D1988QWuXr2K7t27Y/jw4Thy5AjOnDmDzz77DJ988gnu3r2rc3va8qseoBMXF6fzI4qEELh79y5mzZqFzp07q8dBffr0KXr37g0AOHjwIM6fP49OnTph5MiRhdZfvHgxNm3ahB07duDEiROYOnVqmearMhTN7ejoiJCQEJ3eA5GhPH36lCMW6cHDwwNJSUlSx6gcRAlGjBghRowYUdIiBhcXFycKxgIgfv75Z/XrzMxMAUDExcWJnJwc4eDgIHbt2qWef/36deHv7y9u3bolAIg1a9YUan/w4MFiyZIlhab17dtX+Pv7q7e3c+dO9bxz584JAOLGjRtCCCGys7PV29e1PW35VfNV32sCQOOXnZ2dSEhIUC93//59sWLFChEfH18se8H9GhUVpZ4fGRkprK2tRVZWVqnzi2YtLXdFMPbvpxS//1VJeffv06dPBQDx119/GTBV1fDpp5+K5s2bSx2jUjCLI9E2bdqovy94Y3VqaioePnwIPz8/9bR69eph7969cHFxAQC88sorhdo6fPgwunfvXmhanz59cObMGfVrd3f3YturU6cOABR76oQu7WnLr6tdu3bhypUruHLlChISEhAdHY3WrVsjKChIvUzNmjUxadIkXL58GXPnzkVgYCBee+21Ym0V3B+dO3dGZmYmUlNTdZ5PZCpu3boFAHB2dpY4ifnx8PDAtWvX+JBuAzCLjkXaHpek+gUo6dmVRYtW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" width="281" /> </div>
<div style="text-align: left;">
<br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">Lets see the code now:</span></span></div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">
</span></span>
<pre class="brush:java" name="code">
public class LinkListPrograms {
//Refer my link list post for link list implementation details
SLL myList = new SLL();
public static void main(String[] args) {
LinkListPrograms myProg = new LinkListPrograms();
myProg.myList.insert(new Node(11),1);
myProg.myList.insert(new Node(42),2);
myProg.myList.insert(new Node(43),1);
myProg.myList.insert(new Node(44),1);
myProg.myList.insert(new Node(45),2);
myProg.myList.insert(51,1);
myProg.myList.insert(52,2);
myProg.myList.insert(53,1);
myProg.myList.insert(54,1);
myProg.myList.insert(55,2);
myProg.myList.insert(56,4);
myProg.myList.insertAtStart(1);
myProg.myList.insertAtStart(2);
myProg.myList.insertAtStart(3);
myProg.myList.insertAtStart(4);
myProg.myList.insertAtStart(new Node(11));
myProg.myList.insertAtStart(new Node(12));
myProg.myList.insertAtStart(new Node(13));
myProg.myList.insertAtStart(new Node(14));
myProg.myList.printList(myProg.myList.getHead());
System.out.println(myProg.hasLLoop(myProg.myList.getHead()));
}
/*
* Richard Brent's algo: Richard Brent described an alternative cycle
* detection algorithm,which is pretty much like the hare and the tortoise
* [Floyd’s cycle] except the slow node here doesn't move, but is later
* " teleported" to the position of fast node at fixed intervals
*/
public boolean hasLLoop(Node root) {
if (root == null) {
return false;
}
Node slow = root, fast = root;
int taken = 0, limit = 2;
while (slow.getNext() != null && fast.getNext() != null) {
fast = fast.getNext();
taken++;
if (slow == fast) {
return true;
}
if (taken == limit) {
taken = 0;
limit <<= 1; // equivalent to limit *= 2
slow = fast; // teleporting the turtle to the hare's position
}
}
return false;
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">If we run the program we will get output like this:</span></span><br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></span></span></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="color: #38761d;"><span class="pln">============================================================================</span></span></span></span></pre>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;">true</span></span></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
<h3 style="text-align: left;">
</h3>
<div style="text-align: justify;">
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="font-size: x-small;"><span style="font-weight: normal;">Please share your comments if you find anything incorrect, or you want to share more information about the topic discussed above.</span></span></span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><br /></span></span>
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="font-size: x-small;"><span style="font-weight: normal;">I will keep adding more Question here :) </span></span></span></span></div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-35044216215909437252014-06-10T02:39:00.001-07:002014-06-10T02:39:19.559-07:00Privacy Policy<div dir="ltr" style="text-align: left;" trbidi="on">
If you require any more information or have any questions about our privacy policy, please feel free to contact us by email at ashvinbhide@gmail.com.<br /><br />At www.binary-imaginers.blogspot.com, the privacy of our visitors is of extreme importance to us. This privacy policy document outlines the types of personal information is received and collected by www.binary-imaginers.blogspot.com and how it is used.<br /><br />Log Files<br />Like many other Web sites, www.binary-imaginers.blogspot.com makes use of log files. The information inside the log files includes internet protocol ( IP ) addresses, type of browser, Internet Service Provider ( ISP ), date/time stamp, referring/exit pages, and number of clicks to analyze trends, administer the site, track user’s movement around the site, and gather demographic information. IP addresses, and other such information are not linked to any information that is personally identifiable.<br /><br />Cookies and Web Beacons<br />www.binary-imaginers.blogspot.com does not use cookies.<br /><br />DoubleClick DART Cookie<br />.:: Google, as a third party vendor, uses cookies to serve ads on www.binary-imaginers.blogspot.com.<br />.:: Google's use of the DART cookie enables it to serve ads to users based on their visit to www.binary-imaginers.blogspot.com and other sites on the Internet.<br />.:: Users may opt out of the use of the DART cookie by visiting the Google ad and content network privacy policy at the following URL - http://www.google.com/privacy_ads.html<br /><br />Some of our advertising partners may use cookies and web beacons on our site. Our advertising partners include ....<br />Google Adsense<br /><br /><br />These third-party ad servers or ad networks use technology to the advertisements and links that appear on www.binary-imaginers.blogspot.com send directly to your browsers. They automatically receive your IP address when this occurs. Other technologies ( such as cookies, JavaScript, or Web Beacons ) may also be used by the third-party ad networks to measure the effectiveness of their advertisements and / or to personalize the advertising content that you see.<br /><br />www.binary-imaginers.blogspot.com has no access to or control over these cookies that are used by third-party advertisers.<br /><br />You should consult the respective privacy policies of these third-party ad servers for more detailed information on their practices as well as for instructions about how to opt-out of certain practices. www.binary-imaginers.blogspot.com's privacy policy does not apply to, and we cannot control the activities of, such other advertisers or web sites.<br /><br />If you wish to disable cookies, you may do so through your individual browser options. More detailed information about cookie management with specific web browsers can be found at the browsers' respective websites. </div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-19525813354174250152014-06-02T10:07:00.000-07:002016-10-06T00:05:37.403-07:00java program to count minimum number of bits required to convert a given number into another number<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;">
<div style="text-align: left;">
<br />
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><b>Question:</b> Write a
Java program that will return the number of bits that will need to be
changed in order to convert an integer, X, into another integer, Y and vice
versa.</span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><b>Explanation:</b><b></b>
The method should accept two different integers as input. For example, if
your method is passed the integers 12 and 16 then your method should return
a 3 . </span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;">Let's take a
closer look at the example given to us. It says that for the input of a 12
and 16, the output of the method should be a 3. Since we are looking for
the number of bits that will need to be changed, let's convert 12 and 16 to
binary to further understand this bit manipulation problem. The binary
representation of 12 is 01100 and the binary representation of 16 is 10000.
Comparing the binary representation of those two numbers, we can see that
the first 3 digits are different, which means that to convert 12 to 16 or
16 to 12 we would have to change 3 numbers. And that is why the method that
we write should output a 3.</span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><b>Solution:</b>The binary
operator that is perfect for this exercise is the XOR operator. If you need
a refresher on how that operator works you can read this: <a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html" target="_blank">XOR in Java</a>. This is because the XOR operator will
return true when the binary digits being compared are different, but will
return false when they are the same. So, if we just XOR the two numbers
being passed in, the result of the XOR operation will be binary number that
will have a binary 1 each and every time there is a different bit between
the inputs x and y, and a binary 0 when the bits in the input x and y are
the same. So, for example, if we XOR 1001 and 0101 the result of the XOR
operation would be a 1100 because the 2 leftmost bits are different, so the
result of XOR'ing those 2 bits would be a 1 but the 2 rightmost bits in our
inputs are the same, so the result of XOR would be a 0. </span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;">So, the
algorithm to solve this bit manipulation interview question would
be:</span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;">First, XOR the
two numbers being passed in - call them x and y - and then call the result
Z.</span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;">Then, just
count the number of binary 1′s in Z since that count represents the number
of different bits in the two numbers x and y. In order to count the number
of binary 1′s in Z, we can just take Z, and perform the binary AND
operation with the number 1. When the result of that operation is a 1 then
we know that the very last binary digit in Z is a 1. Then, we can shift Z
by 1 bit and repeat until there is nothing left to shift - which is when Z
is equal to 0. </span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;">Here is the
Java implementation of that algorithm and our final answer to this problem:
</span>
</div>
<div style="text-align: left;">
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;"><br /></span>
</div>
<div style="text-align: justify;">
<span style="font-family: "verdana" , sans-serif;">Bit-wise and
bit shift operations:</span>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="brush:java">public class BitDiffernce {
public int findNumberOfBits(int x, int y) {
int bitCount = 0;
int z = x ^ y; //XOR x and y
while (z != 0) {
//increment count if last binary digit is a 1:
bitCount += z & 1;
z = z >> 1; //shift Z by 1 bit to the right
}
return bitCount;
}
public static void main(String args[]) {
BitDiffernce bd = new BitDiffernce();
System.out.println("No of bits needed to change are: "+
bd.findNumberOfBits(12, 46));
}
} </pre>
</div>
</div>
</div>
</div>
<h1>
</h1>
<br />
<span style="font-size: small;"><span style="font-family: "verdana" , sans-serif;"><span style="color: #110000;"><span style="color: black;">You will get following
output</span></span></span></span><tt><span style="color: #110000;"><span style="font-family: serif;"><tt><span style="color: #110000;">:</span></tt></span></span></tt><br />
<span style="font-family: "verdana" , sans-serif;"><br />
</span><br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content" style="font-size: small;"><span class="block" style="font-family: "verdana" , sans-serif; margin-left: 0px;"><code class="comments"><b><span style="font-family: "verdana" , sans-serif;">Output<span style="font-family: "verdana" , sans-serif;">:</span></span></b></code></span></span> <span class="content"><span class="block" style="font-family: "verdana" , sans-serif; margin-left: 0px;"><code class="comments"><b><span style="font-family: "verdana" , sans-serif;"><span style="color: #38761d;">
======================================================</span> </span></b></code></span></span></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="font-family: "verdana" , sans-serif; margin-left: 0px;"><code class="comments"><b><span style="font-family: "verdana" , sans-serif;"> </span></b> </code></span></span></pre>
<span style="font-family: "verdana" , sans-serif;"><code></code>
<span style="font-family: Verdana,sans-serif;"><span style="font-size: small;">No of bits needed to change are:2</span></span></span>
</div>
</div>
<h3 style="text-align: left;">
</h3>
<h4 style="text-align: left;">
</h4>
<br /></div>
<div style="text-align: left;">
<br /></div>
</div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-62138904989841645432014-06-02T09:33:00.000-07:002015-02-05T07:11:05.403-08:00Bitwise and Bit Shift Operators in Java<div dir="ltr" style="text-align: left;" trbidi="on">
This post is all about basic understanding of operators that perform bit-wise and bit shift operations on integral types that Java programming language provides.<br />
<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div style="text-align: left;">
<span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Section in this post:</span></span></div>
<div style="text-align: left;">
<ol style="text-align: left;">
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section1"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">List of Operators</span></span><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"> </span></span></a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section2"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Unary bitwise complement</span></span><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"> </span></span></a></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section3">Bitwise AND</a> </span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section4">Bitwise exclusive OR</a> </span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section5">Bitwise inclusive OR</a> </span></span></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section6"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Signed left shift</span></span><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"> </span></span></a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section7"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Non circular shift</span></span></a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section8"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Unsigned right shift(<span style="color: black;"><b>Logical right shift</b></span>)</span></span><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"> </span></span></a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section9"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Lost Bits are gone</span></span><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"> </span></span></a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section10"><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Signed right shift(<span style="color: black;"><b>Arithmetic right shift</b></span>)</span></span></a><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"> </span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"><a href="http://binary-imaginers.blogspot.in/2014/06/bitwise-and-bit-shift-operators-in-java.html#section11">Example</a> </span></span></li>
</ol>
</div>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
</div>
</div>
</div>
<div id="section1" style="text-align: left;">
<h4 style="text-align: left;">
<span style="color: #38761d;"><b>The bitwise operators: </b></span></h4>
</div>
<table border="1" cellpadding="4" cellspacing="0">
<tbody>
<tr><th>Operator</th><th>Name</th><th>Example</th><th>Result</th><th>Description</th></tr>
<tr><td><code><i>a</i> & <i>b</i></code></td><td>and</td><td>3 & 5</td><td>1</td><td>1 if both bits are 1.</td></tr>
<tr><td><code><i>a</i> | <i>b</i></code></td><td>or</td> <td>3 | 5 </td><td>7</td><td>1 if either bit is 1.</td></tr>
<tr><td><code><i>a</i> ^ <i>b</i></code></td><td>xor</td> <td>3 ^ 5 </td><td>6</td><td>1 if both bits are different.</td></tr>
<tr><td><code>~<i>a</i></code></td><td>not</td> <td>~3 </td><td>-4</td><td>Inverts the bits.</td></tr>
<tr><td><code><i>n</i> << <i>p</i></code></td><td>left shift</td><td>3 <<< 2</td><td>12</td><td>Shifts the bits of <i>n</i> left <i>p</i>
positions. Zero bits are shifted into the low-order positions.</td></tr>
<tr><td><code><i>n</i> >> <i>p</i></code></td><td>right shift</td><td>5 >> 2</td><td>1</td><td>Shifts the bits of <i>n</i> right <i>p</i>
positions. If <i>n</i> is a 2's complement signed number, the sign bit
is shifted into the high-order positions.</td></tr>
<tr><td><code><i>n</i> >>> <i>p</i></code></td><td>right shift</td><td nowrap="true">-4 >>> 28 </td><td>15</td><td>Shifts the bits of <i>n</i> right <i>p</i>
positions. Zeros are shifted into the high-order positions.</td></tr>
</tbody></table>
<br />
<span style="color: #38761d;"><b>Note:</b></span> "<code><<<</code>" is not an operator, because it would be redundant. Lets see each operator one by one:<br />
<ul style="text-align: left;">
</ul>
<h4 style="text-align: left;">
<span id="section2" style="color: #38761d;"><b>The unary bitwise complement operator:</b></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><b> </b></span></h4>
<div>
The unary bitwise complement operator "<code>~</code>" inverts a bit
pattern; it can be applied to any of the integral types, making every
"0" a "1" and every "1" a "0".<br />
<b>For example:</b> A <code>byte</code> contains 8 bits; applying this operator to a value whose bit pattern is "00000000" would change its pattern to "11111111"<br />
<br />
<h4 style="text-align: left;">
<span id="section3" style="color: #38761d;"><b>The bitwise <code>&</code> operator:</b></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><b> </b></span></h4>
<div style="text-align: left;">
<span style="font-family: Times,"Times New Roman",serif; font-size: small;">Bitwise AND operator works similar to logical AND operator (&&)
and returns 1 if both operands are 1. Difference with bitwise AND and logical
AND also known as short-circuit AND operator is that, logical AND operator
applies only to boolean type. Also bitwise AND operator is denoted by singe & while
short circuit AND operator is denoted by &&. </span></div>
</div>
<div style="text-align: left;">
</div>
<div>
<span style="font-size: small;"><span style="font-family: Times,"Times New Roman",serif;"><b>For example:</b>If A
represent 0010 and B represent 1010 then result of A&B would be
0010. </span></span><br />
<div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;">
<br /></div>
</div>
<div style="text-align: left;">
<h4 style="text-align: left;">
<span id="section4" style="color: #38761d;"><b>The bitwise <code>^</code> operator:</b></span></h4>
</div>
<div style="text-align: left;">
<br />
<span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Bitwise XOR operator is denoted by ^ and also work on individual bits.
There is no short-circuit XOR operator in Java and result of bitwise XOR
operator is XOR operation of individual bits. see the truth table of XOR
operation for predicting result. in short bitwise XOR operators will return 1
if both bits are different and return 0 if both bits are same.</span></span><br />
<div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;">
<br /></div>
<h4 style="text-align: left;">
<span id="section5" style="color: #38761d;"><b>The bitwise <code>|</code> operator:</b></span></h4>
</div>
<div style="text-align: left;">
<span style="color: #38761d;"><b><span style="font-family: Arial; font-size: 9.0pt; mso-bidi-font-weight: bold;"><br /></span></b></span></div>
<div style="text-align: left;">
<span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Bitwise OR operator is also similar to bitwise AND operator and applies
to individual bits. It’s different than short-circuit OR operator, which is
denoted by (||) and operates on boolean variable. Bitwise OR operator produce
result of OR operation on two bits. Like other
bitwise operator in Java, bitwise OR is only applicable to integral types.</span></span><br />
<div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;">
</div>
<br />
<h4 style="text-align: left;">
<span id = "section6" style="color: #38761d;"><b>Left shift (<<)</b></span></h4>
<br />
<div>
Integers are stored, in memory, as a series of bits. For example, the number 6 stored as a 32-bit <code>int</code> would be:<code> </code><br />
<pre><code>00000000 00000000 00000000 00000110</code></pre>
Shifting this bit pattern to the left one position (<code>6 << 1</code>) would result in the number 12:<code> </code><br />
<pre><code>00000000 00000000 00000000 00001100 </code></pre>
As you can see, the digits have shifted to the left by one position,
and the last digit on the right is filled with a zero.<br />
<br />
<span style="color: #38761d;"><b>Note:</b></span> Shifting left is equivalent to multiplication by powers of 2.
So <code>6 << 1</code> is equivalent to <code>6 * 2</code>, and <code>6 << 3</code> is equivalent to <code>6 * 8</code>. A good optimizing compiler will substitute shifts for multiplications when possible.<br />
<br />
<h4 style="text-align: left;">
<span id ="section7" style="color: #38761d;"><b>Non-circular shifting :</b></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><b> </b></span></h4>
Please note that these are <i>not</i> circular shifts. Shifting this value to the left by one position (<code>3,758,096,384 << 1</code>):<br />
<pre><code>11100000 00000000 00000000 00000000
</code></pre>
results in 3,221,225,472:<br />
<pre><code>11000000 00000000 00000000 00000000
</code></pre>
The digit that gets shifted "off the end" is lost. It does not wrap around<br />
<br />
<h4 style="text-align: left;">
<span id ="section8" style="color: #38761d;"><b>Logical right shift (>>>) </b></span></h4>
</div>
<div>
<br />
A logical right shift is the converse to the left shift. Rather than
moving bits to the left, they simply move to the right. For example,
shifting the number 12:<br />
<pre><code>00000000 00000000 00000000 00001100</code></pre>
to the right by one position (<code>12 >>> 1</code>) will get back our original 6:<code> </code><br />
<pre><code>00000000 00000000 00000000 00000110</code></pre>
So we see that shifting to the right is equivalent to division by powers of 2.<br />
<br />
<h4 style="text-align: left;">
<span id = "section9" style="color: #38761d;">Lost bits are gone</span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"> </span></h4>
However, a shift cannot reclaim "lost" bits. For example, if we shift this pattern:<br />
<pre><code>00111000 00000000 00000000 00000110</code></pre>
to the left 4 positions (<code>939,524,102 << 4</code>), we get 2,147,483,744:<br />
<pre><code>10000000 00000000 00000000 01100000 </code></pre>
and then shifting back (<code>(939,524,102 << 4) >>> 4</code>) we get 134,217,734:<code> </code><br />
<pre><code>00001000 00000000 00000000 00000110</code></pre>
We cannot get back our original value once we have lost bits.<br />
<br /></div>
<div>
<h4 style="text-align: left;">
<span id = "section10" style="color: #38761d;"><b>Arithmetic right shift (>>)</b></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><b> </b></span></h4>
The arithmetic right shift is exactly like the logical right shift,
except instead of padding with zero, it pads with the most significant
bit. This is because the most significant bit is the <i>sign</i> bit,
or the bit that distinguishes positive and negative numbers. By
padding with the most significant bit, the arithmetic right shift is
sign-preserving.<br />
<br />
For example, if we interpret this bit pattern as a negative number:<br />
<pre><code>10000000 00000000 00000000 01100000</code></pre>
we have the number -2,147,483,552. Shifting this to the right 4
positions with the arithmetic shift (-2,147,483,552 >> 4) would
give us:<br />
<pre><code>11111000 00000000 00000000 00000110</code></pre>
or the number -134,217,722.<br />
<br />
So we see that we have preserved the sign of our negative numbers by
using the arithmetic right shift, rather than the logical right shift.
And once again, we see that we are performing division by powers of 2.<br />
<br />
Here a simple java program showing Bit-wise and bit shift operations:<br />
<br />
<div id ="section11" style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class tetBitOperator{
public static void main(String args[]) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
System.out.println("a="+a);
System.out.println("b="+b);
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 215 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 215 = 0000 1111 */
System.out.println("a >>> 2 = " + c )
}
}</pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln"> </span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">==========================================================================</span></span></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span class="pln">a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15 </span></pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
<br />
<ul style="text-align: left;">
</ul>
</div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-57434212209395030572014-05-30T04:03:00.000-07:002015-02-05T07:15:23.743-08:00 Producer Consumer Problem's solution in Java<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 0.5em 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
From the<b> </b>Wikipedia definition, the<a href="http://en.wikipedia.org/wiki/Producer%E2%80%93consumer_problem" target="_blank"><span class="Apple-converted-space"> </span><b>producer–consumer problem</b></a><span class="Apple-converted-space"> </span>(also known as the<span class="Apple-converted-space"> </span><b>bounded-buffer problem</b>) is a classic example of a multi-process<span class="Apple-converted-space"> </span>synchronization<span class="Apple-converted-space"> </span>problem. The problem describes two processes, the producer and the consumer, who share a common, fixed-size<span class="Apple-converted-space"> </span>buffer<span class="Apple-converted-space"> </span>used as a<span class="Apple-converted-space"> </span>queue. The producer's job is to generate a piece of data, put it into the buffer and start again. At the same time, the consumer is consuming the data (i.e., removing it from the buffer) one piece at a time. The problem is to make sure that the producer won't try to add data into the buffer if it's full and that the consumer won't try to remove data from an empty buffer.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 0.5em 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
The solution for the producer is to either go to sleep or discard data if the buffer is full. The next time the consumer removes an item from the buffer, it notifies the producer, who starts to fill the buffer again. In the same way, the consumer can go to sleep if it finds the buffer to be empty. The next time the producer puts data into the buffer, it wakes up the sleeping consumer. The solution can be reached by means of<span class="Apple-converted-space"> </span>inter-process communication. An inadequate solution could result in a<span class="Apple-converted-space"> </span>deadlock<span class="Apple-converted-space"> </span>where both processes are waiting to be awakened. The problem can also be generalized to have multiple producers and consumers.</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 0.5em 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 0.5em 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
In this post I am sharing my producer-consumer solution written in Java.<br />
<br />
<b>Producer class:</b> <br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">import java.util.Vector;
public class MyProducer implements Runnable{
/*taking vector to use as buffer,
*it will keep numbers produced by Producer
*and work as synchronisation object
*/
Vector<Integer> sharedQ;
// Size will store the maximum size of buffer
int SIZE;
/*
* Constructor for Producer class
*/
public MyProducer(Vector<Integer> sharedQ, final int size) {
this.sharedQ =sharedQ;
this.SIZE= size;
}
@Override
public void run() {
int i=0;
while(true){
i++;
produce(i);
}
}
/*
* This method has the logic for producing numbers
*and synchronization with consumer
*/
public void produce(int i) {
//testing if buffer is already full
while(sharedQ.size() == SIZE) {
synchronized (sharedQ) {
try {
System.out.println("producer waiting...");
//waiting until some space is made in buffer
sharedQ.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//adding numbers in buffer
synchronized(sharedQ) {
sharedQ.add(i);
System.out.println("Producer produced: "+i);
//notifying other thread which are waiting on sharedQ
sharedQ.notifyAll();
}
try {
/*
* making thread to sleep for random time after producing
*so as to make output more readable and understandable
*we can set any arbitrary sleeping time
*/
Thread.sleep(((long)((Math.random())*10000)));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
<span style="font-size: small;">Consumer class:</span></h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">import java.util.Vector;
public class MyConsumer implements Runnable {
/*taking vector to use as buffer,
*it will keep numbers produced by Producer
*and work as synchronisation object
*/
Vector<Integer> sharedQ;
public MyConsumer(Vector<Integer> sharedQ) {
this.sharedQ = sharedQ;
}
@Override
public void run() {
/*
* loop will go on forever
*/
while(true) {
consumed();
/*
* making thread to sleep for random time after consuming
*so as to make output more readable and understandable
*we can set any arbitrary sleeping time
*/
try {
Thread.sleep(((long)((Math.random())*20000)));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
/*
* This method has the logic for consuming numbers
*and synchronization with producer
*/
public void consumed() {
// cheacking if buffer is empty-then consumer has to wait
while(sharedQ.isEmpty()) {
synchronized(sharedQ) {
try {
System.out.println(Thread.currentThread().getName()+" waiting...");
sharedQ.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//consuimng a number from the buffer
synchronized(sharedQ) {
System.out.println(Thread.currentThread().getName()+" consumed "+sharedQ.remove(0));
//notifying other thread which are waiting on sharedQ
sharedQ.notifyAll();
}
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
<span style="font-size: small;">Test class:</span></h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">import java.util.Vector;
public class MyProducerConsumerTest {
public static void main(String args[]) {
/*taking vector to use as buffer,
*it will keep numbers produced by Producer
*and work as synchronisation object
*/
Vector<Integer> sharedQ = new Vector<Integer>();
// Size will store the maximum size of buffer
final int SIZE = 5;
//Making producer and consumer thread
Thread producer = new Thread(new MyProducer(sharedQ,SIZE),"producer");
Thread consumer = new Thread(new MyConsumer(sharedQ),"consumer");
//starting producer/consumer threads
producer.start();
consumer.start();
/*
* this join is optional-
* after join this main thread will never finish as consumer/producer willl run forever
* to see effect of join we need to make consumer/producer to run for some specific time
*/
try {
producer.join();
consumer.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
* this will never get printed
* unless we remove join call made above or finish execution of producer/consumer threads
*/
System.out.println("all done");
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
<span style="font-size: small;"><span style="font-weight: normal;">We can make this code to work for multiple producer/consumer scenario just by changing test class and creating multiple threads for producer and consumer. </span></span><span style="font-size: small;"><br /></span></h1>
<h1>
<span style="font-size: small;">Modified Test class:</span></h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">import java.util.Vector;
public class MyProducerConsumerTest {
public static void main(String args[]) {
/*taking vector to use as buffer,
*it will keep numbers produced by Producer
*and work as synchronisation object
*/
Vector<Integer> sharedQ = new Vector<Integer>();
// Size will store the maximum size of buffer
final int SIZE = 5;
//Making producer and consumer thread
Thread producer1 = new Thread(new MyProducer(sharedQ,SIZE),"producer1");
Thread producer2 = new Thread(new MyProducer(sharedQ,SIZE),"producer2");
Thread producer3 = new Thread(new MyProducer(sharedQ,SIZE),"producer3");
Thread consumer1 = new Thread(new MyConsumer(sharedQ),"consumer1");
Thread consumer2 = new Thread(new MyConsumer(sharedQ),"consumer2");
Thread consumer3 = new Thread(new MyConsumer(sharedQ),"consumer3");
Thread consumer4 = new Thread(new MyConsumer(sharedQ),"consumer4");
//starting producer/consumer threads
producer1.start();
producer2.start();
producer3.start();
consumer1.start();
consumer2.start();
consumer3.start();
consumer4.start();
/*
* this join is optional-
* after join this main thread will never finish as consumer/producer willl run forever
* to see effect of join we need to make consumer/producer to run for some specific time
*/
try {
producer1.join();
producer2.join();
producer3.join();
consumer1.join();
consumer2.join();
consumer3.join();
consumer4.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
* this will never get printed
* unless we remove join call made above or finish execution of producer/consumer threads
*/
System.out.println("all done");
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
<span style="font-size: small;"><span style="font-weight: normal;"><br /></span></span></h1>
<h1>
<span style="font-size: small;"> </span></h1>
</div>
<div style="-webkit-text-stroke-width: 0px; background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22.399999618530273px; margin: 0.5em 0px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-15967678389178366682014-05-29T00:55:00.000-07:002016-05-10T21:43:35.242-07:00immutability in Java<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
An object is considered <i>immutable</i> if its state cannot change after it is constructed.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Immutable objects are particularly useful in concurrent applications.
Since they cannot change state, they cannot be corrupted by thread
interference or observed in an inconsistent state. </div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li><code></code> <a href="http://binary-imaginers.blogspot.in/2014/05/immutability-in-java.html#section1">Strategy for defining immutable objects</a> </li>
<li><a href="http://binary-imaginers.blogspot.in/2014/05/immutability-in-java.html#section2">Declaring class as final</a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/05/immutability-in-java.html#section3">Using factory methods and making constructor private</a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/05/immutability-in-java.html#section4">When mutable variables are present in class</a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/05/immutability-in-java.html#section5">Builder design pattern</a></li>
<li><a href="http://binary-imaginers.blogspot.in/2014/05/immutability-in-java.html#section6">Date Object in immutable class </a></li>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<div id="PageTitle" style="text-align: left;">
<h1>
<span id="section1" style="font-size: large;">Strategy for Defining Immutable Objects</span></h1>
</div>
<div style="text-align: left;">
The following rules define a simple strategy for creating immutable objects. </div>
<ol style="text-align: left;">
<li>Don't provide "setter" methods — methods that modify fields or objects referred to by fields.</li>
<li>Make all fields <code>final</code> and <code>private</code>.</li>
<li>Set all instance data in the constructor. </li>
<li>Don't allow sub-classes to override methods. The simplest way to do this is to declare the class as <code>final</code>. A more sophisticated approach is to make the constructor <code>private</code> and construct instances in factory methods.</li>
<li>If the instance fields include references to mutable objects, don't allow those objects to be changed:
<ul>
<li>Don't provide methods that modify the mutable objects.</li>
<li>
Clone mutable objects for which a reference to them is returned.<br />
</li>
<li>
Clone mutable objects for which a reference to them is received.<br />
</li>
<li>
Implement a deep clone if the default shallow clone is not correct for
a properly behaved immutable object.</li>
</ul>
</li>
</ol>
<div style="text-align: left;">
Lets add all above rules and make something concrete class implementation.</div>
<ol style="text-align: left;">
</ol>
<span id="section2" style="font-size: large;"><b>By making class final:</b></span><br />
<br />
This is the most simple way of making a class mutable.<br />
<ol style="text-align: left;">
</ol>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public final class FinalPersonClass {
private final String name;
private final int age;
public FinalPersonClass(final String name, final int age) {
super();
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
} </pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<span id="section3" style="font-size: large;"><b> Using Factory methods and making constructor private:</b></span><br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">//No need to make class final here
public class FinalPerson {
private final String name;
private final int age;
private FinalPerson(final String name, final int age) {
super();
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public FinalPerson getFinalPerson(final String name, final int age) {
return new FinalPerson(final String name, final int age);
}
} </pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<span style="font-size: large;"><span id="section4" style="font-family: "times" , "times new roman" , serif;"><b>Making a class immutable in Java, which includes mutable member
variable.</b></span></span><br />
<br />
When an immutable class is implemented, mutable objects passed to or returned
from an immutable object must be properly cloned. Consider the following class declarations: a <tt>DiskDriveInfo</tt> class and
a <tt>User</tt> class. The <tt>DiskDriveInfo</tt> is intended to be immutable. The
<tt>User</tt> encapsulates which user has shared access to the disk drive. The
<tt>User</tt> object with shared access is stored as part of the <tt>DiskDriveInfo</tt>
object. In the following example, the designer of the class was careful to make
the class <tt>final</tt> and all fields <tt>private</tt>, and to provide only getter
methods. Is the <tt>DiskDriveInfo</tt> class immutable? If not, what needs to
be done to make it so?<span style="font-size: large;"><span id="section4" style="font-family: "times" , "times new roman" , serif;"><b><br /></b></span></span>
<br />
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">class User
{
private String userName;
private String userID;
private int userNode;
User(String name, int node)
{
userName = name;
userNode = node;
}
public void setUserName(String name)
{
userName = name;
}
public void setUserID(String userid)
{
userID = userid;
}
public void setUserNode(int node)
{
userNode = node;
}
public String userName()
{
return userName;
}
}</pre>
</div>
<h3 style="text-align: left;">
</h3>
</div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">final class DiskDriveInfo
{
private int driveSize;
private String volumeLabel;
private User driveShare;
DiskDriveInfo(int size, String volLabel, User share)
{
driveSize = size;
volumeLabel = volLabel;
driveShare = share;
}
public int size()
{
return driveSize;
}
public String label()
{
return volumeLabel;
}
public User share()
{
return driveShare;
}
}</pre>
</div>
<h3 style="text-align: left;">
</h3>
</div>
</div>
<div style="text-align: left;">
<h3 style="text-align: left;">
</h3>
</div>
The <tt>DiskDriveInfo</tt> class is not immutable. Objects of this class can
be changed. Consider the following code that creates a <tt>DiskDriveInfo</tt>
object and tests its immutability:<br />
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">class Test
{
private static final int sizeInMeg = 200;
public static void main(String args[])
{
User share1 = new User("Duke", 10); //1
DiskDriveInfo dd = new DiskDriveInfo(sizeInMeg, "myDrive",
share1); //2
User share = dd.share();
System.out.println("User with shared access is " +
share.userName());
share1.setUserName("Fred"); //3
System.out.println("User with shared access is " +
share.userName());
}
}</pre>
</div>
<h3 style="text-align: left;">
</h3>
</div>
</div>
<div style="text-align: left;">
<h3 style="text-align: left;">
<span style="font-weight: normal;">If we run the program we will get output like this:</span></h3>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">================================================================================</span></span></pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre>User with shared access is Duke
User with shared access is Fred</pre>
</div>
</div>
</div>
</div>
What went wrong? This code creates a <tt>User</tt> object, <tt>share1</tt>, at
//1, with the user name <tt>Duke</tt>. A supposedly immutable <tt>DiskDriveInfo</tt>
object is created at //2 and is passed a reference to the <tt>User</tt> object.
The <tt>DiskDriveInfo</tt> object is queried, and the shared owner, <tt>Duke</tt>,
is printed. The <tt>User</tt> object, <tt>share1</tt>, changes its name to <tt>Fred</tt>
at //3. When the <tt>DiskDriveInfo</tt> object is queried again for the user name,
it discovers that the name changed from <tt>Duke</tt> to <tt>Fred</tt>.<br />
The problem is that the <tt>DiskDriveInfo</tt> constructor receives a reference
to the <tt>User</tt> object and does not make a copy, or clone, of this object.
Therefore, the <tt>DiskDriveInfo</tt> constructor receives a copy of the reference
to the <tt>User</tt> object. Now the <tt>DiskDriveInfo</tt> object's <tt>driveShare</tt>
field and the local variable, <tt>share1</tt>, in <tt>main</tt> of class <tt>Test</tt>,
reference the same object. Therefore, any changes made through either reference
affect the same object. Figure shows the object layout after the code at //1 is executed.</div>
<span id="section5" style="font-size: large;"><b><span style="font-family: "times" , "times new roman" , serif;"></span></b></span><br />
<br />
<br />
<br />
<img alt="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig1.gif" src="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig1.gif" /><br />
<span style="font-size: large;"><span id="section4" style="font-family: "times" , "times new roman" , serif;"><b> </b></span></span>
<br />
After the code at //2 is executed, the object layout looks as shown in Figure<br />
<br />
<img alt="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig2.gif" src="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig2.gif" /><br />
Notice that because the reference to the <tt>User</tt> object is not cloned,
both the <tt>share1</tt> and <tt>driveShare</tt> references share the same <tt>User</tt>
object. After the code at //3 is executed, the object layout as shown in Figure.<br />
<br />
<img alt="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig3.gif" src="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig3.gif" /><br />
<br />
To correct this problem, the <tt>DiskDriveInfo</tt> class must clone any mutable object to which it receives
a reference. It then has a reference to its own copy of the object that cannot
be changed by other code.
<br />
The modified <tt>DiskDriveInfo</tt> class that supports cloning looks like this:<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">final class DiskDriveInfo
{
//As before...
DiskDriveInfo(int size, String volLabel, User share)
{
driveSize = size;
volumeLabel = volLabel;
driveShare = (User)share.clone();
}
public User share()
{
return (User)driveShare.clone();
}
}</pre>
</div>
<h3 style="text-align: left;">
</h3>
</div>
</div>
Because you are cloning the <tt>User</tt> object, its definition must change
as well.<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">class User implements Cloneable
{
//As before...
public Object clone()
{
try {
return super.clone();
}
catch (CloneNotSupportedException e) {
//This should not happen, since this class is Cloneable.
throw new InternalError();
}
}
}</pre>
</div>
<h3 style="text-align: left;">
</h3>
</div>
</div>
With these changes to the <tt>User</tt> object, running the previous test code
produces the correct output:<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">================================================================================</span></span></pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre>User with shared access is Duke
User with shared access is Fred</pre>
</div>
</div>
</div>
</div>
Because the <tt>User</tt> object is cloned on the constructor call, the code
that subsequently changes the <tt>User</tt> object at //1 has no effect on the
<tt>DiskDriveInfo</tt> object. The implementation of the immutable <tt>DiskDriveInfo</tt>
class is now correct. The object layout looks as shown in Figure</div>
<div style="text-align: left;">
<br />
<img alt="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig4.gif" src="http://ptgmedia.pearsoncmg.com/images/art_haggar2_praxis64/elementLinks/haggar2_fig4.gif" /><br />
<br />
<span id="section5" style="font-size: large;"><b><span style="font-family: "times" , "times new roman" , serif;">Achieving Immutability with Builder Design Pattern:</span></b></span></div>
<div style="background-color: white; border: medium none; color: black; overflow: hidden; text-align: left; text-decoration: none;">
<div style="text-align: left;">
<br />
<div style="text-align: left;">
In most of the
classes in our real applications there are many fields. Also,
most of these fields are not mandatory for object creation.
For example, a user in a real application will have a username,
password, firstname, lastname, creationDate, emailAddress, etc., but for
user creation here, only a username and password are required. </div>
<br />
<i>The Builder Pattern separates the construction of a complex
object from its representation so that the same construction process
can create different representations.</i><br />
The builder design pattern provides a way for you to build complex
immutable objects. The process is:<br />
<ol>
<li>The client calls a constructor (or static factory) with all the
required parameters and gets a builder object.</li>
<li>The client calls setter like methods to set each optional parameter
of interest.</li>
<li>Finally the client calls the build method to generate the object
which is immutable.</li>
</ol>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div class="container">
<pre class="java" name="code">import java.math.BigDecimal;
/**
* Immutable, hence thread safe CashBalance objec
*/
public final class CashBalance {
private BigDecimal initialBalance, totCredits, totDebits;
//construct
public CashBalance(CashBalanceBuilder builder) {
this.initialBalance = builder.initialBalance;
this.totCredits = builder.totCredits;
this.totDebits = builder.totDebits;
}
public static class CashBalanceBuilder {
//has same fields as the object it is going to build
protected BigDecimal initialBalance, totCredits, totDebits;
//define the setters that return itself
CashBalanceBuilder setInitialBalance(BigDecimal initialBalance) {
this.initialBalance = initialBalance;
return this;
}
CashBalanceBuilder setTotCredits(BigDecimal totCredits) {
this.totCredits = totCredits;
return this;
}
CashBalanceBuilder setTotDebits(BigDecimal totDebits) {
this.totDebits = totDebits;
return this;
}
}
//only getter methods and no setter methods as it is an immutable object
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
The client code will look like this :<b><span style="font-family: "arial"; font-size: 9.0pt;"><span style="font-size: small;"><span style="font-family: "times" , "times new roman" , serif;"></span></span></span></b><br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<b><span style="color: #38761d;"></span></b><br />
<div class="container">
<pre class="java" name="code">public static void main(String[] args) {
CashBalance.CashBalanceBuilder builder =
new CashBalance.CashBalanceBuilder(
.setInitialBalance(BigDecimal.valueOf(250.00))
.setTotCredits(BigDecimal.valueOf(250.00))
.setTotDebits(BigDecimal.valueOf(250.00));
CashBalance bal = new CashBalance(builder);
}
</pre>
</div>
<b></b></div>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<span id="section5" style="font-size: large;"><b><span style="font-family: "times" , "times new roman" , serif;"><span id="section6" style="font-family: "times" , "times new roman" , serif;">How to use <span style="font-family: "times" , "times new roman" , serif;">D</span>ate object in immutable class</span></span></b></span><br />
<br />
This is a commonly asked scenario in interviews while discussing about immutable classes.<br />
Some time you may need to write
immutable class which includes mutable classes like java.util.Date, <b>despite
storing Date into final field it can be modified</b> <b>internally,</b> if
internal date is returned to the client. In order to preserve immutability in
such cases, its advised to <b>return copy of original object</b>.<br />
<div style="text-align: left;">
<div style="text-align: left;">
</div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
Consider the below code:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "Times New Roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public final class ImmutableReminder{
private final Date remindingDate;
public ImmutableReminder (Date remindingDate)
{
if(remindingDate.getTime() < System.currentTimeMillis()){
throw new IllegalArgumentException("Can not
set reminder” + “ for past time: " + remindingDate);
}
// creating new object of Date first
this.remindingDate = new Date(remindingDate.getTime());
}
public Date getRemindingDate() {
//returning clone of the date object
return (Date) remindingDate.clone();
}
} </pre>
</div>
<h3 style="text-align: left;">
</h3>
</div>
</div>
<div style="text-align: left;">
<h3 style="text-align: left;">
</h3>
</div>
<br /></div>
</div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-67625902139920068532014-05-28T06:01:00.001-07:002014-05-29T10:16:29.516-07:00serialVersionUID<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<br />
When you serialize an object using <a href="http://binary-imaginers.blogspot.in/2014/05/serialization-in-java.html">Serialization</a>
mechanism (by implementing Serializable interface), there is a
possibility that you may face versioning issues and because of these
versioning issues, you will not be able to deserialize the object.<br />
<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li><code></code> Problem to face</li>
<li>Root of the problem</li>
<li>Solution </li>
<li>What is serialVersionUID</li>
<li>Example</li>
<li>When to update serialVersionUID</li>
<ol>
<li>Compatible changes</li>
<li>Incompatible changes </li>
</ol>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br /><b>Problem scenario.... </b><br />
<br />
lets say you created a class, instantiated it, and wrote it out to an
object stream. That flattened object sits in the file system for some
time. Meanwhile, you update the class file, perhaps adding a new field.
Now try to read the flattened object. An exception
"java.io.InvalidClassException" will be thrown.<br />
<br />
<b>Root of the problem</b><br />
<br />
lets first see what is actually causing this problem? Why should any
change in a serialized class throw "InvalidClassException". During object
serialization, the default Java serialization mechanism writes the
metadata about the object, which includes the class name, field names
and types, and superclass. All this information is stored as part of the
serialized object.<br />
When you deserialize the object, this information is
read to reconstitute the object. But to perform the deserialization, the
object needs to be identified first and this will be done by
serialVersionUID. So everytime an object is serialized the java
serialization mechanism automatically computes a hash value using
ObjectStreamClass’s <i><b>computeSerialVersionUID()</b></i> method by passing the
class name, sorted member names, modifiers, and interfaces to the secure
hash algorithm (SHA), which returns a hash value, the serialVersionUID.<br />
<br />
Now when the serilaized object is retrieved, the JVM first evaluates the
serialVersionUID of the serialized class and compares the
serialVersionUID value with the one of the object. If the
sserialVersionUID values match then the object is said to be compatible
with the class and hence it is de-serialized. If not
InvalidClassException exception is thrown.<br />
<br />
<b>And the solution is...</b><br />
<br />
The solution is very simple. Instead of relying on the JVM to generate
the serialVersionUID, you explicitly mention (generate) the
serialVersionUID in your class. The syntax is:<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<pre class="java" name="code">
private final static long serialVersionUID = <integer value>
</pre>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<b>What is serialVersionUID? </b><br />
<br />
Its a static, private variable in the class. Once you define the
serialVersionUID in your class explicitly, you don't need to update it
until and unless you make the incompatible changes.<br />
<br />
<b>Example: </b><br />
<br />
Consider the same example taken from serialization post to explain the issue and importance of maintaining
serialVersionUID.<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"> <span style="color: black;">
<pre class="java" name="code">
<br />import java.io.IOException;<br />import java.io.ObjectInputStream;<br />import java.io.ObjectOutputStream;<br />import java.io.Serializable;<br />import java.util.Calendar;<br />import java.util.Date;<br /><br />public class MyDateObject implements Serializable{<br /> <br /> //first time we keep serial VersionUID as 1L<br/> private static final long serialVersionUID = 1L;<br /> private Date date;<br /><br /> public MyDateObject() {<br /> //date= Calendar.getInstance().getTime();<br /> calculateCurrentTime();<br /> }<br /><br /> public Date getDate() {<br /> return date;<br /> }<br /><br /> public void setDate(Date date) {<br /> this.date=date;<br /> } <br /> <br /> private void calculateCurrentTime(){<br /> date = Calendar.getInstance().getTime();<br /> }<br /> <br /> private void writeObject(ObjectOutputStream out) throws IOException {<br /> out.defaultWriteObject();<br /> }<br /><br /> private void readObject(ObjectInputStream in) <br /> throws IOException, ClassNotFoundException{<br /><br /> // our "pseudo-constructor"<br /> in.defaultReadObject();<br /> // now perfrom same operation you need to do in constructor<br /> calculateCurrentTime();<br /> }<br />}</span></span>
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<b> </b>Class to serialize MayDate object :<br />
<b><br /></b>
<b> </b><br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"><br /><span style="color: black;">
<pre class="java" name="code">
import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.ObjectOutputStream;<br /><br />//Class to persist the time in a flat file time.ser<br />public class WriteSerialClass {<br /><br /> public static void main(String [] args) {<br /> String filename = "c://time.txt";<br /><br /> if(args.length > 0){<br /> filename = args[0];<br /> }<br /> <br /> MyDateObject time = new MyDateObject();<br /> FileOutputStream fos = null;<br /> ObjectOutputStream out = null;<br /><br /> try{<br /> fos = new FileOutputStream(filename);<br /> out = new ObjectOutputStream(fos);<br /> out.writeObject(time);<br /> out.close();<br /> }catch(IOException ex){<br /> ex.printStackTrace();<br /> }<br /> }<br />}</span></span>
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
Class to De-serialize MydateObject:<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"><span style="color: black;"><br />
<pre class="java" name="code">
import java.io.FileInputStream;<br />import java.io.IOException;<br />import java.io.ObjectInputStream;<br />import java.util.Calendar;<br /><br />public class ReadSerialClass {<br /><br /> public static void main(String [] args) {<br /> String filename = "c://time.txt";<br /><br /> if(args.length > 0){<br /> filename = args[0];<br /> }<br /> <br /> MyDateObject time = null;<br /> FileInputStream fis = null;<br /> ObjectInputStream in = null;<br /><br /> try{<br /> fis = new FileInputStream(filename);<br /> in = new ObjectInputStream(fis);<br /> time = (MyDateObject)in.readObject();<br /> in.close();<br /> }catch(IOException ex){<br /> ex.printStackTrace();<br /> }catch(ClassNotFoundException cnfe){<br /> cnfe.printStackTrace();<br /> }<br /><br /> // print out restored time<br /> System.out.println("Restored time: " + time.getDate());<br /><br /> // print out the current time<br /> System.out.println("Current time: " <br /> + Calendar.getInstance().getTime());<br /><br /> }<br /> }</span> </span>
</pre>
</div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;">Output:</span></div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;">=======================================================</span></div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"><span style="color: black;">Restored time: Wed May 28 18:11:41 IST 2014<br />Current time: Wed May 28 18:11:42 IST 2014</span> </span></div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"> </span> </div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<b></b><b> </b>Now run the following program again by changing serialVersionUID value in myDateObject class:<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"> <span style="color: black;"><br />
<pre class="java" name="code">
import java.io.IOException;<br />import java.io.ObjectInputStream;<br />import java.io.ObjectOutputStream;<br />import java.io.Serializable;<br />import java.util.Calendar;<br />import java.util.Date;<br /><br />public class MyDateObject implements Serializable{<br /> <br /> //Now we change serial VersionUID as 2L<br /> private static final long serialVersionUID = 2L;<br /> private Date date;<br /><br /> public MyDateObject() {<br /> //date= Calendar.getInstance().getTime();<br /> calculateCurrentTime();<br /> }<br /><br /> public Date getDate() {<br /> return date;<br /> }<br /><br /> public void setDate(Date date) {<br /> this.date=date;<br /> } <br /> <br /> private void calculateCurrentTime(){<br /> date = Calendar.getInstance().getTime();<br /> }<br /> <br /> private void writeObject(ObjectOutputStream out) throws IOException {<br /> out.defaultWriteObject();<br /> }<br /><br /> private void readObject(ObjectInputStream in) <br /> throws IOException, ClassNotFoundException{<br /><br /> // our "pseudo-constructor"<br /> in.defaultReadObject();<br /> // now perfrom same operation you need to do in constructor<br /> calculateCurrentTime();<br /> }<br />}</span></span>
</pre>
</div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
</div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"><span style="color: black;"><span style="color: #38761d;"><b>Output</b></span>:</span></span></div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"><span style="color: black;">=========================================================</span></span></div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="color: #38761d;"><span style="color: black;">java.io.InvalidClassException: com.MyDateObject; local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2<br /> at java.io.ObjectStreamClass.initNonProxy(Unknown Source)<br /> at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)<br /> at java.io.ObjectInputStream.readClassDesc(Unknown Source)<br /> at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)<br /> at java.io.ObjectInputStream.readObject0(Unknown Source)<br /> at java.io.ObjectInputStream.readObject(Unknown Source) </span></span> </div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<b> </b>The reason of the above error is the version change and exactly this is the reason for maintaining the version.<br />
By maintaining version we keep the serialization/de-serialiation consistent <br />
<br />
<b>When to update serialVersionUID?</b><br />
<br />
Adding serialVersinUID manually to the class does not mean that it
should never be updated and never need not be updated. There is no need
to update the serialVersionUID if the change in the class is compatible
but it should be updated if the change is incompatible<br />
<br />
Some of compatible changes are: <br />
<ul class="square">
<li style="padding-left: 5px;"> Adding field. </li>
<li style="padding-left: 5px;"> Adding classes. </li>
<li style="padding-left: 5px;"> Removing classes.</li>
<li style="padding-left: 5px;"> Adding writeObject/readObject methods.</li>
<li style="padding-left: 5px;"> Removing writeObject/readObject methods.</li>
<li style="padding-left: 5px;"> Adding java.io.Serializable.</li>
<li style="padding-left: 5px;"> Changing the access to a field.</li>
<li style="padding-left: 5px;"> Changing a field from static to nonstatic or transient to nontransient.</li>
</ul>
Some of the Incompatible changes are:
<br />
<ul class="square" style="text-align: left;">
<li style="padding-left: 5px;"> Deleting fields. </li>
<li style="padding-left: 5px;"> Moving classes up or down the hierarchy.</li>
<li style="padding-left: 5px;"> Changing a nonstatic field to static or a nontransient field to transient.</li>
<li style="padding-left: 5px;"> Changing the declared type of a primitive field. </li>
<li style="padding-left: 5px;"> Changing the writeObject or readObject method.</li>
<li style="padding-left: 5px;">Changing a class from Serializable to Externalizable or visa-versa.</li>
<li style="padding-left: 5px;"> Removing either Serializable or Externalizable. </li>
<li style="padding-left: 5px;">Adding the writeReplace or readResolve method. </li>
</ul>
</div>
<br />
<div>
<br />
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-14852182279828353722014-05-28T03:48:00.003-07:002014-05-29T10:16:29.509-07:00Serialization in Java<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
Serialization is the process of converting an object's state (including
its references) to a sequence of bytes, as well as the process of
rebuilding those bytes into a live object at some future time.</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li><code></code> Some uses of serailization</li>
<li>Serializable Interface</li>
<li>Serialization steps</li>
<li>readObject and writeObjectMethods </li>
<li>FAQ</li>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<div style="text-align: left;">
Serialization is used when you want to persist the object. It is also
used by RMI to pass objects between JVMs, either as arguments in a
method invocation from a client to a server or as return values from a
method invocation. In general, serialization is used when we want the
object to exist beyond the lifetime of the JVM. </div>
<div style="text-align: left;">
<br />
<br /></div>
<div style="text-align: left;">
Here are some uses of serialization </div>
<ul class="square" style="text-align: left;">
<li style="padding-left: 5px;"> To persist data for future use. </li>
<li style="padding-left: 5px;"> To send data to a remote computer using such client/server Java technologies as RMI or socket programming. </li>
<li style="padding-left: 5px;"> To "flatten" an object into array of bytes in memory. </li>
<li style="padding-left: 5px;"> To exchange data between applets and servlets. </li>
<li style="padding-left: 5px;"> To store user session in Web applications. </li>
<li style="padding-left: 5px;"> To activate/passivate enterprise java beans. </li>
<li style="padding-left: 5px;"> To send objects between the servers in a cluster. </li>
</ul>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Java provides Serialization API, a standard mechanism to handle
object serialization.
To persist an object in java, we need to follow following steps.</div>
<ol style="text-align: left;">
<li> the first step is to <b>flatten the
object</b>. For that the respective class should implement
"java.io.Serializable" interface. We don't need to implement
any methods as this interface do not have any methods. This is a marker
interface/tag interface. Marking a class as Serializable indicates the
underlying API that this object can be flattened. </li>
</ol>
<div style="text-align: left;">
<br />
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
public class MyDateObject implements Serializable{
private static final long serialVersionUID = -5315058568373987829L;
private Date date;
public MyDateObject() {
date= Calendar.getInstance().getTime();
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date=date;
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
2. Next step is to actually persist the object. To persist an object we need to use node stream to write to file systems or transfer a flattened
object across a network. We can use java.io.ObjectOutputStream class for this. So to write an object you use "writeObject(<<instance>>)"
method of "java.io.ObjectOutputStream" class and to read an object you
use "readObject()" method of "java.io.ObjectOutputStream" class.<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: #38761d;">Note:</span> "readObject()" can read only serialized object, that means if the class
does not implement "java.io.Serializable" interface, "readObject()"
cannot read that object.</div>
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<br />
<pre class="java" name="code">import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
//Class to persist the time in a flat file time.txt
public class WriteSerializeClass {
public static void main(String [] args) {
String filename = "c://time.txt";
if(args.length > 0){
filename = args[0];
}
MyDateObject time = new MyDateObject();
FileOutputStream fos = null;
ObjectOutputStream out = null;
try{
fos = new FileOutputStream(filename);
out = new ObjectOutputStream(fos);
out.writeObject(time);
out.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
<br />
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre></pre>
<pre> </pre>
<pre class="java" name="code">import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Calendar;
//Class to read the time from a flat file time.txt
public class ReadSerializeClass {
public static void main(String [] args) {
String filename = "c://time.txt";
if(args.length > 0){
filename = args[0];
}
MyDateObject time = null;
FileInputStream fis = null;
ObjectInputStream in = null;
try{
fis = new FileInputStream(filename);
in = new ObjectInputStream(fis);
time = (MyDateObject)in.readObject();
in.close();
}catch(IOException ex){
ex.printStackTrace();
}catch(ClassNotFoundException cnfe){
cnfe.printStackTrace();
}
// print out restored time
System.out.println("Restored time: " + time.getDate());
// print out the current time
System.out.println("Current time: "
+ Calendar.getInstance().getTime());
}
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
<b>readObject and writeObject methods:</b><br />
<br />
To enhance the normal process of serialization/de-serialization provide two methods inside your serializable class. Those methods are:<br />
<ol style="text-align: left;">
<li><i>private void writeObject(ObjectOutputStream out) throws IOException;</i></li>
<li><i>private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException; </i></li>
</ol>
<i> </i> Let's look at one example<br />
<br />
Without readObjet()/writeObject()<br />
<br />
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
public class MyDateObject implements Serializable{
private static final long serialVersionUID = -5315058568373987829L;
private Date date;
public MyDateObject() {
//date= Calendar.getInstance().getTime();
calculateCurrentTime();
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date=date;
}
private void calculateCurrentTime(){
date = Calendar.getInstance().getTime();
}
}
</pre>
<b><span style="color: #38761d;">Output:</span></b><br />
=================================================================<br />
<br />
Restored time: Wed May 28 15:54:31 IST 2014<br />
Current time: Wed May 28 15:54:34 IST 2014
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
Now we will add the two methods: readObjet()/writeObject()</div>
<div>
<br />
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre></pre>
<pre class="java" name="code">import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Date;
public class MyDateObject implements Serializable{
private static final long serialVersionUID = -5315058568373987829L;
private Date date;
public MyDateObject() {
//date= Calendar.getInstance().getTime();
calculateCurrentTime();
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date=date;
}
private void calculateCurrentTime(){
date = Calendar.getInstance().getTime();
} //Adding writObject()
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
} //Adding readObject()
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException{
in.defaultReadObject();
// now perfrom same operation you need to do in constructor
calculateCurrentTime();
}
}
</pre>
<b><span style="color: #38761d;">Output:</span></b><br />
<pre>=========================================================================</pre>
<pre>Restored time: Wed May 28 16:08:26 IST 2014
Current time: Wed May 28 16:08:26 IST 2014</pre>
</div>
</div>
</div>
</div>
<br />
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
<h3 style="text-align: left;">
</h3>
So by overriding these two methods, we can easily get desired serialization/de-serialization behavior.<br />
<br />
<span style="color: #38761d;"><b>Note:</b></span> serialization does not care about access modifiers. It serializes all private, public and protected fields.<br />
<br />
Again there is one more way to serialize the object - create your own
protocol with the Externalizable interface. Instead of implementing the
Serializable interface, you can implement Externalizable, which contains
two methods:<br />
<ol style="text-align: left;">
<li>
<i>public void writeExternal(ObjectOutput out) throws IOException;</i><i> </i></li>
<li><i>public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException;</i></li>
</ol>
The Externalization is discussed as separate post. Check it out here .
<br />
<br />
<b>Some FAQ:</b><br />
<ol style="text-align: left;">
<li><b>why readObject And writeObject declared as private?</b></li>
</ol>
<b> Ans: We don't want these methods to be overridden by subclasses</b>. Instead, each class can have its own <code>writeObject</code>
method, and the serialization engine will call all of them one after
the other. This is only possible with private methods (these are not
overridden). (The same is valid for <code>readObject</code>.)<br />
That's why both methods are declared private . The trick here is that the virtual machine
will automatically check to see if either method is declared during the
corresponding method call. The virtual machine can call private methods
of your class whenever it wants but no other objects can. Thus, the
integrity of the class is maintained and the serialization protocol can
continue to work as normal.
<br />
<br />
2. <b>How stop from serailizing one of the sub class of a serializable class?</b><br />
<br />
<b>Ans:</b>To stop the automatic serialization, we can once again override the readObject/writeObject
methods to just throw the NotSerializableException in our class.<br />
<div style="text-align: left;">
<br />
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">private void writeObject(ObjectOutputStream out) throws IOException{
throw new NotSerializableException("Dont Serialize");
}
private void readObject(ObjectInputStream in) throws IOException{
throw new NotSerializableException("Dont Serialize");
}</pre>
<br /></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
<br />
<br />
<br />
<br />
<div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<ol style="text-align: left;">
</ol>
<pre></pre>
</div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-14941936439722017502014-05-12T23:54:00.004-07:002014-05-29T10:15:54.704-07:00Simple Example to show Dependency inversion using Spring<div dir="ltr" style="text-align: left;" trbidi="on">
This is a simple example to explain difference between a program having dependency inversion and one without it.<br />
<br />
First we will see program without Dependency Inversion.<br />
<br />
<b>Example code without Dependency Inversion</b> <br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class VotingBooth {
VoteRecorder voteRecorder = new VoteRecorder();
public void vote(Candidate candidate) {
voteRecorder.record(candidate);
}
class VoteRecorder {
Map hVotes = new HashMap();
public void record(Candidate candidate) {
int count = 0;
if (!hVotes.containsKey(candidate)){
hVotes.put(candidate, count);
} else {
count = hVotes.get(candidate);
}
count++;
hVotes.put(candidate, count);
}
}
}
</pre>
</div>
</div>
In this example, the <span class="emphasis"><i>VotingBooth</i></span> class is directly dependent on <span class="emphasis"><i>VoteRecorder</i></span>,
which has no abstractions and is the implementing class.
<br />
<br />
A dependency “inverted” version of this code might look a little different.
First, we would define our <code class="code">VoteRecorder</code> interface.
<br />
<br />
<b>Code with Dependency Inversion in Spring:</b> <br />
<br />
We can use our code exactly as is. All we need to do is inform Spring through an XML configuration file that the recorder bean is implemented by the LocalVoteRecorder class. We do this with the following line:<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times Nw eRoman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public interface VoteRecorder {
public void record(Candidate candidate) ;
}
</pre>
</div>
</div>
And our implementing classes<br />
<br />
The <code class="code">LocalVoteRecorder</code>, which implements the <code class="code">VoteRecorder</code> interface: <br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class LocalVoteRecorder implements VoteRecorder {
Map hVotes = new HashMap();
public void record(Candidate candidate) {
int count = 0;
if (!hVotes.containsKey(candidate)){
hVotes.put(candidate, count);
} else {
count = hVotes.get(candidate);
}
count++;
hVotes.put(candidate, count);
}
}
</pre>
</div>
</div>
And the <code class="code">VotingBooth</code> class:<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class VotingBooth {
VoteRecorder recorder = null;
public void setVoteRecorder(VoteRecorder recorder) {
this.recorder = recorder;
}
public void vote(Candidate candidate) {
recorder.record(candidate);
}
</pre>
</div>
</div>
Now all we need to do is inform Spring through an XML configuration file that
the <span class="emphasis"><i>recorder</i></span> bean is implemented by the <code class="code">LocalVoteRecorder</code> class. We do this with the following line:<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code"><bean id="recorder" class="com.springindepth.LocalVoteRecorder" /></pre>
</div>
</div>
Then we simply map the recorder bean to the VotingBooth bean by setter injection in that beans definition.<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code"><bean id="votingBooth" class="com.springindepth.VotingBooth">
<property name="voteRecorder" ref="recorder"/>
</bean></pre>
</div>
</div>
**Example taken from http://www.springbyexample.org/</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-68350567827043472562014-03-29T05:24:00.002-07:002014-05-30T08:20:13.920-07:00Java Program to merge two sorted Arrays<div dir="ltr" style="text-align: left;" trbidi="on">
To merge two sorted array is one of the very commonly asked Interview question.<br />
<br />
below is my code of merging two sorted arrays with explanation<br />
<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre style="color: #110000;"></pre>
<pre><span style="color: #110000;">
</span></pre>
<pre class="java" name="code">import java.util.Arrays;
public class MergeSortedArray {
int [] a = {1,3,5,7,9,10};// -----> first sorted array
int [] b = {2,4,6,8,8}; // -----> Second sorted array
public static void main(String[] args) {
MergeSortedArray msa = new MergeSortedArray();
/*
* printing all three arrays
*/
System.out.println("First Sorted Array is:");
System.out.println(Arrays.toString(msa.a));
System.out.println();
System.out.println("Second Sorted Array is:");
System.out.println(Arrays.toString(msa.b));
System.out.println();
System.out.println("Merged Sorted Array is:");
System.out.println(Arrays.toString(
msa.getSortedMergedArray(msa.a, msa.b)));
}
/*
*Method to merged array which will be to get combined sorted array
*/
public int[] getSortedMergedArray(int[] a, int[] b) {
// defining new array of size first+second array
int[] mergedArray = new int[a.length + b.length];
int i = 0, j = 0, k = 0;
/*
*iterating till last element of any of the array
* We only loop till we reach at the end of any of the two arrays
*/
while (i < a.length && j < b.length) {
if (a[i] < b[j]) {
mergedArray[k++] = a[i++];
}
else {
mergedArray[k++] = b[j++];
}
}
/*
* loop to add reaming elements of either of the remaining array
*/
while (i < a.length) {
mergedArray[k++] = a[i++];
}
while (j < b.length) {
mergedArray[k++] = b[j++];
}
return mergedArray;
}
}
</pre>
<pre><span style="color: lime;">OUTPUT:</span></pre>
<pre><span style="color: #110000;">===========================================================================</span></pre>
<pre><span style="color: #110000;">
</span></pre>
<pre><span style="color: #110000;">First Sorted Array is:
[1, 3, 5, 7, 9, 10]
Second Sorted Array is:
[2, 4, 6, 8, 8]
Merged Sorted Array is:
[1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10]
</span></pre>
<div>
<span style="color: #110000;"><br /></span></div>
</div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-9429785249418753802014-03-29T05:10:00.001-07:002014-05-31T08:19:57.028-07:00Java Program to find all combinations of a string<div dir="ltr" style="text-align: left;" trbidi="on">
To find All combinations of a string is another commonly asked Interview question.<br />
<br />
Below is my code for finding all the combinations of a given string with explanation:<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class AllStringCombinations {
// taking String Builder object as we need to modify many time
private StringBuilder outputString = new StringBuilder();
private final String inputString;
/*
*Constructor
*/
public AllStringCombinations( final String str ){
inputString = str;
System.out.println("The input string is : " + inputString);
}
public static void main (String args[])
{
AllStringCombinations allStringCombinations =
new AllStringCombinations("wxyz");
System.out.println("");
System.out.println("All possible combinations are : ");
System.out.println("");
allStringCombinations.getCombination(0);
}
/*
*Method to print all possible combinations recursively
*/
public void getCombination(int start) {
for( int i = start; i <= inputString.length()-1; ++i ){
outputString.append( inputString.charAt(i) );
System.out.println( outputString );
if ( i <= inputString.length() )
// Recursive call
getCombination( i + 1);
outputString.setLength( outputString.length() - 1 );
}
}
}
</pre>
<br />
<pre><span style="color: lime;">OUTPUT:</span></pre>
<pre style="color: #110000;">===========================================================================</pre>
<pre><span style="color: #110000;">The input string is : wxyz
All possible combinations are :
w
wx
wxy
wxyz
wxz
wy
wyz
wz
x
xy
xyz
xz
y
yz
z</span></pre>
</div>
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-32694658136194627032014-03-29T04:55:00.002-07:002014-05-31T22:43:20.056-07:00java Program to find if two Strings are Anagrms<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
</div>
</div>
</div>
<br />
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
To find if two given Strings are Anagram of each other is very commonly asked interview Question.<br />
<br />
Any word or phrase that exactly reproduces the letters in another order is an <a href="http://en.wikipedia.org/wiki/Anagram">anagram.</a><br />
<i>for example "William Shakespeare</i> " and "I<i> am a weakish speller</i> " are Anagrams.<br />
<br />
In a perfect anagram, every letter must be used, with exactly the same number of occurrences as in the anagrammed word or phrase.<br />
<br />
Below is my code of checking if two given strings are anagrams. <br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre style="color: #110000;"></pre>
<pre style="color: #110000;"></pre>
<div style="color: black; font-family: 'Times New Roman'; white-space: normal;">
<br />
<pre class="java" name="code">public class Anagram {
boolean isAnagram(String s1,String s2) {
char a1[]= s1.toCharArray();
char a2[]= s2.toCharArray();
int []index1= new int[26];
int []index2= new int[26];
int i = 0;
for(i=0;i<a1.length;i++) {
index1[a1[i]-'a']++;
}
for(i=0;i<a2.length;i++) {
index2[a2[i]-'a']++;
}
for(i=0;i<26;i++) {
if(index1[i]!=index2[i])
return false;
}
return true;
}
public static void main(String[] args) {
String s1="xyzabc";
String s2 = "abcxyz";
Anagram anagram = new Anagram();
if(anagram.isAnagram(s1,s2)==true)
System.out.println(" String "+s1+" is anagram of "+s2);
else
System.out.println(" String "+s1+" is not anagram of "+s2);
}
}</pre>
</div>
<div style="font-family: 'Times New Roman'; white-space: normal;">
<br />
<span style="color: #38761d;">Output:</span></div>
<div style="color: black; font-family: 'Times New Roman'; white-space: normal;">
==================================================================</div>
<span style="font-family: Times New Roman;"><span style="white-space: normal;"> String xyzabc is anagram of abcxyz</span></span></div>
</div>
</div>
</div>
</div>
<br />
<pre style="color: #110000;"></pre>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-68714069125170790422014-03-26T03:24:00.000-07:002014-05-21T02:00:13.069-07:00Tree Terminology<div dir="ltr" style="text-align: left;" trbidi="on">
This is my quick recap guide for commonly used tree terminologies:<br />
<br />
<br />
<div style="text-align: center;">
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/binaryTree.bmp" /></div>
<br />
<ul>
<li>The <span style="color: #38761d;"><b>depth</b></span> of a node is the number of edges from the root to the
node.<br />
</li>
<li>The <span style="color: #38761d;"><b>height</b></span> of a node is the number of edges from the node to the deepest leaf.
</li>
<li>The height of a tree is a height of the root.
</li>
<li>A <span style="color: #38761d;"><b>full binary tree</b></span> is a binary tree in which each node has exactly zero or two children.
</li>
<li>A <span style="color: #38761d;"><b>complete binary tree</b></span> is a binary tree, which is completely
filled, with the possible exception of the bottom level, which is filled from left to
right.
</li>
</ul>
<center>
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/full_complete.bmp" /> </center>
<center>
<h2 style="text-align: left;">
<span style="color: #38761d;"> </span></h2>
<h2 style="text-align: left;">
<span style="color: #38761d;">Traversals</span></h2>
<div style="text-align: left;">
A traversal is a process that visits all the nodes in the tree. Since
a tree is a nonlinear data structure, there is no unique traversal. We
will consider several traversal algorithms with we group in the
following two kinds
</div>
<ul style="text-align: left;">
<li>depth-first traversal
</li>
<li>breadth-first traversal
</li>
</ul>
<div style="text-align: left;">
There are three different types of depth-first traversals, :
</div>
<ul style="text-align: left;">
<li>PreOrder traversal - visit the parent first and then left and right children;
</li>
<li>InOrder traversal - visit the left child, then the parent and the right child;
</li>
<li>PostOrder traversal - visit left child, then the right child and then the parent;
</li>
</ul>
<div style="text-align: left;">
There is only one kind of breadth-first traversal--the<span style="color: #38761d;"><b> level order
traversal</b></span>. This traversal visits nodes by levels from top to bottom and
from left to right.
</div>
<table cellpadding="2">
<tbody>
<tr align="left">
<td>As an example consider the following tree and its four traversals:
<br />
<br />
PreOrder - 8, 5, 9, 7, 1, 12, 2, 4, 11, 3
<br />
InOrder - 9, 5, 1, 7, 2, 12, 8, 4, 3, 11
<br />
PostOrder - 9, 1, 2, 12, 7, 5, 3, 11, 4, 8
<br />
LevelOrder - 8, 5, 4, 9, 7, 11, 1, 12, 3, 2
</td>
<td> <img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/tree1.bmp" height="320" width="320" /> </td>
</tr>
</tbody></table>
<div style="text-align: left;">
The next picture demonstrate the order of node visitation.
Number 1 denote the first node in a particular traversal and 7 denote
the last node.
</div>
<div style="text-align: left;">
<div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;">
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/traversals.bmp" /></div>
</div>
<div style="text-align: left;">
<h2>
</h2>
<h2>
<span style="color: #38761d;">Binary Search Trees </span></h2>
</div>
</center>
<div style="text-align: left;">
A BST is a binary tree where nodes are ordered in the following way:
<br />
<ul>
<li>each node contains one key (also known as data)
</li>
<li>the keys in the left subtree are less then the key in its
parent node, in short L < P;
</li>
<li>the keys in the right subtree are greater the key in its parent
node, in short P < R;
</li>
<li>duplicate keys are not allowed.</li>
</ul>
<table cellpadding="2"><tbody>
<tr align="left"><td><img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/pix03.bmp" height="200" width="300" /> </td>
<td>In the following tree all nodes in the left subtree of 10 have keys
< 10
while all nodes in the right subtree > 10. Because both the left and
right subtrees of a BST are again search trees; the above definition is
recursively applied to all internal nodes:
</td></tr>
</tbody></table>
<br />
<h3>
<span style="color: #38761d;">Insertion</span></h3>
<div style="text-align: left;">
<br />
<span style="color: #38761d;"><span style="color: black;">We start at the root and
recursively go down the tree searching for a location in a BST to insert
a new node.
If the element to be inserted is already in the tree, we are done (we do
not insert duplicates). The new node will always replace a NULL
reference.</span></span><br />
<span style="color: #38761d;"><span style="color: black;"> </span>
</span></div>
<center>
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/insert.bmp" height="259" width="640" /></center>
<h3>
<span style="color: #38761d;"> </span></h3>
<h3>
<span style="color: #38761d;">Searching</span></h3>
<br />
Searching in a BST always starts at the root. We compare a data stored at the root with
the key we are searching for. If the node
does not contain the key we proceed either to the left or right child depending upon
comparison. If the result of comparison is negative we go to the left child,
otherwise - to the right child.</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<h3>
<span style="color: #38761d;"> </span></h3>
<h3>
<span style="color: #38761d;">Deletion</span></h3>
<br />
There are few cases to consider.<br />
<ul>
<li> is not in a tree;
</li>
<li> is a leaf;
</li>
<li> has only one child;
</li>
<li> has two children.
</li>
</ul>
If node to delete is not in the tree, there is nothing to delete. If
node to delete has only one child the procedure of deletion is identical to
deleting a node from a linked list - we just bypass that node being
deleted<br />
<br />
<center>
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/del01.bmp" /></center>
<br />
Deletion of an internal node with two children is less
straightforward. If we delete such a node, we split a tree into two
subtrees and therefore, some children of the internal node won't be
accessible after deletion. In the picture below we delete 8:<br />
<br />
<center>
<img src="http://www.cs.cmu.edu/%7Eadamchik/15-121/lectures/Trees/pix/del02.bmp" height="238" width="640" /></center>
<br />
We replace the node being deleted with
the largest node in the left subtree and then delete that largest node.
By symmetry, the node being deleted can be swapped with the smallest
node is the right subtree</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
<b>**taken from http://www.cs.cmu.edu </b></div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-14332001361843098392014-03-04T03:42:00.004-08:002020-07-14T04:20:07.554-07:00Cloning in Java<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
A <b>clone</b> is an exact copy of the original. <b>In java, it essentially means the ability to create an object with similar state as the original object.</b></div>
<div style="text-align: left;">
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span style="font-size: small;"><span style="font-family: "arial", "helvetica", sans-serif;"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"><font size="3"><b>Sections in this post:</b></font> </code></span></span></span></span></pre>
<ol style="text-align: left;">
<li><code></code> <span style="font-family: "arial", "helvetica", sans-serif;">Default Java cloning</span></li>
<span style="font-family: "arial", "helvetica", sans-serif;">
</span>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Cloneable Interface</span></li>
<span style="font-family: "arial", "helvetica", sans-serif;">
</span>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Shallow cloning</span></li>
<span style="font-family: "arial", "helvetica", sans-serif;">
</span>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Deep cloning </span></li>
<span style="font-family: "arial", "helvetica", sans-serif;">
</span><ol>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Deep cloning by overriding clone method</span></li>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Deep cloning using copy constructor</span></li>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Deep cloning using The factory Method</span></li>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Deep cloning by Serialzation</span></li>
</ol>
<span style="font-family: "arial", "helvetica", sans-serif;">
</span>
<li><span style="font-family: "arial", "helvetica", sans-serif;">Summery </span></li>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
Java cloning</h3>
<h3 style="text-align: left;">
</h3>
<div style="text-align: left;">
<b>By default, java cloning is ‘field by field copy’</b> i.e. as the Object class does not have idea about the structure of class on which clone() method will be invoked. So, JVM when called for cloning, do following things:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>1)</b> If the class has <b>only primitive data type members</b> then a completely new copy of the object will be created and the reference to the <b>new object copy will be returned</b>.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>2)</b> If the class contains <b>members of any class type</b> then only the object references to those members are copied and hence the <b>member references in both the original object as well as the cloned object refer to the same object</b>.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In java, if a class needs to support cloning it has to do following things:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>A)</b> <font size="3">It must implement <b>Cloneable</b> interface.</font></div><font size="3">
</font><div style="text-align: left;">
<font size="3"><b>B)</b> It must override <b>clone()</b> method from Object class. </font></div><font size="3">
</font><div style="text-align: left;"><font size="3">
</font><br /></div>
<div style="text-align: left;">
<b>Cloneable Interface</b></div>
<pre style="text-align: left;">public interface <span class="strong">Cloneable</span></pre>
<div style="text-align: left;">
A class implements the <code>Cloneable</code> interface to
indicate to the <code>Object.clone()</code> method that it
is legal for that method to make a
field-for-field copy of instances of that class.
Invoking Object's clone method on an instance that does not implement the
<code>Cloneable</code> interface results in the exception
<code>CloneNotSupportedException</code> being thrown.
</div>
<div style="text-align: left;">
By convention, classes that implement this interface should override
<tt>Object.clone</tt> (which is protected) with a public method.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Java docs about clone() method says:</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments">1. x.clone() != x will be true</code></span></span></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments">2. </code></span></span><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments">x.clone().getClass() == x.getClass() will be true, </code></span></span></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"> but these are not absolute requirements.</code></span></span></pre>
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px;"><code class="comments">3. x.clone().equals(x) will be true, this is not an absolute requirement</code></span></span> </code></span></span></pre>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<ol style="text-align: left;">
<li> First statement <b>guarantees</b> that cloned object will have separate memory address assignment.</li>
<li>Second statement <b>suggest</b> that original and cloned objects should have same class type, but it is not mandatory.</li>
<li>Third statement <b>suggest</b> that original and cloned objects should have be equal using equals() method, but it is not mandatory.</li>
</ol>
<div style="text-align: left;">
Cloning can be categorized in two types:</div>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
Shallow Cloning </h3>
<h3 style="text-align: left;">
</h3>
<div style="text-align: left;">
<b>This is default implementation in java</b>. In overridden clone method, if you are not cloning all the object types (not primitives), then you are making a shallow copy. Let's see one example:</div>
<div style="text-align: left;">
<br />
Class Employee implements cloneable Interface and has Department as its member variable<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Employee implements Cloneable{
private int employeeId;
private String employeeName;
private Department department;
public Employee(int id, String name, Department dept) {
this.empoyeeId = id;
this.employeeName = name;
this.department = dept;
}
public int getEmployeeId() {
return empoyeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = empoyeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
</pre>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
Class Department:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Department
{
private int id;
private String name;
public Department(int id, String name)
{
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
</pre>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
Test Class:</div><div style="text-align: left;"><br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class TestCloning {
public static void main(String[] args)
throws CloneNotSupportedException {
Department dept = new Department(1, "Human Resource");
Employee original = new Employee(1, "Admin", dept);
//Lets create a clone of original object
Employee cloned = (Employee) original.clone();
//Let verify using employee id, if cloning actually worked
System.out.println(cloned.getEmpoyeeId());
//Verify JDK's rules
//Must be true and objects must have different memory addresses
System.out.println(original != cloned);
//As we are returning same class; so it should be true
System.out.println(original.getClass() == cloned.getClass());
//Default equals method checks for references so it should be false.
// If we want to make it true,
//we need to override equals method in Employee class.
System.out.println(original.equals(cloned));
}
}
</pre>
<pre><b><span style="color: #38761d;">Output:</span></b></pre>
<pre><span style="color: #38761d;">====================================================================<span style="color: #110000;">======</span></span> </pre>
<pre> 1
true
true
false</pre>
<span class="content"><span class="block" style="margin-left: 0px;"><code class="comments"> </code></span></span>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
What will happen if we don't implement cloneable Interface???</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Check the following code for Class Employee, I have not Implemented Cloneable interface this time but clone method is still there. No compilation error will be shown but when we run the code run-time Exception will come.</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Employee {
private int empoyeeId;
private String employeeName;
private Department department;
public Employee(int id, String name, Department dept) {
this.empoyeeId = id;
this.employeeName = name;
this.department = dept;
}
public int getEmpoyeeId() {
return empoyeeId;
}
public void setEmpoyeeId(int empoyeeId) {
this.empoyeeId = empoyeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}</pre>
<pre></pre>
<pre><b><span style="color: #38761d;">Output</span></b></pre>
<pre><span style="color: #38761d;">====================================================<span style="color: #110000;">=======================</span></span></pre>
<pre></pre>
<pre>Exception in thread "main" java.lang.CloneNotSupportedException:</pre>
<pre> com.Employee
at java.lang.Object.clone(Native Method)
at com.Employee.clone(Employee.java:48)
at com.TestCloning.main(TestCloning.java:13)
</pre>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
We can see even if Object class has clone method still we need to implement Cloneable interface to use clone method. </div>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
Deep cloning</h3>
<div style="text-align: left;">
<br />
We want a clone which is independent of original and making changes in clone should not affect original.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
But before seeing how deep cloning works, lets see what happens when we create two objects of employee class:</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class TestCloning {
public static void main(String[] args)
Department hr = new Department(1, "Human Resource");
Employee original = new Employee(1, "Admin", hr);
Employee cloned = (Employee) original.clone();
//Let change the department name in cloned object
//and we will verify in original object
cloned.getDepartment().setName("Finance");
System.out.println(original.getDepartment().getName());
}
}
</pre>
<br />
<b><span style="color: #38761d;">Output: </span></b><br />
<pre><span style="color: #38761d;">==========================================================================</span><b><span style="color: #38761d;"> </span></b></pre>
<pre>Finance</pre>
</div>
</div>
<br />
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
cloned object changes are visible in original also. To prevent this from happening we need to do deep cloning.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Let see how it can be done<br />
<br />
<span style="font-size: large;"><b>1. Deep Cloning by overriding clone() </b></span><br />
Modified clone() method in Employee class<span style="font-size: large;"><b> </b></span>
</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">@Override
protected Object clone() throws CloneNotSupportedException {
Employee cloned = (Employee)super.clone();
cloned.setDepartment((Department)cloned.getDepartment().clone());
return cloned;
}</pre>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
<font size="3"><span style="font-family: "arial", "helvetica", sans-serif;"> <span><span style="color: #110000;"><span style="color: black;">override clone method in Department class also:</span></span></span></span></font><br />
<span style="font-family: "times new roman";"><span style="font-family: "times", "times new roman", serif;"><span style="color: #110000;"><span style="font-size: small;"><span style="color: black;"><tt><span style="font-family: "times new roman";"> </span></tt></span></span></span></span><tt><span style="color: #110000;"><br /></span></tt></span></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}</pre>
</div>
</div>
<div style="color: black; font-size: medium; font-weight: normal; text-align: left;">
</div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: "verdana", sans-serif;">Test class:</span></span><br />
<span style="font-size: small;"><span style="font-family: "verdana", sans-serif;"><br /></span></span></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class TestCloning {
public static void main(String[] args)
throws CloneNotSupportedException {
Department hr = new Department(1, "Human Resource");
Employee original = new Employee(1, "Admin", hr);
Employee cloned = (Employee) original.clone();
//Let's change the department name in cloned object
//and we will verify in original object
cloned.getDepartment().setName("Finance");
System.out.println(original.getDepartment().getName());
}
}</pre>
<pre> </pre>
<pre><span style="font-family: "arial", "helvetica", sans-serif;"><span style="font-size: small;"><b><span style="color: #38761d;">Output:</span> </b></span></span></pre>
<pre><span style="font-family: "arial", "helvetica", sans-serif;"><span style="color: #38761d;"><b>==========================================================================</b></span></span> </pre>
<pre>Human Resource</pre>
</div>
</div>
<div style="text-align: left;">
</div>
<div style="text-align: left;">
So deep cloning requires satisfaction of following rules.</div>
<ul style="text-align: left;">
<li>All
the member classes in original class should support cloning and in
clone method of original class in context should call super.clone() on
all member classes.</li>
<li>If any member class does not support cloning
then in clone method, one must create a new instance of that member
class and copy all its attributes one by one to new member class object.
This new member class object will be set in cloned object. </li>
</ul>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
<span style="font-size: large;">2. Deep Cloning Using Copy Constructors</span></h3>
<div style="text-align: left;">
<br />
A copy constructor is a constructor that takes only one argument which
is of the type as the class in which the copy constructor is
implemented. For example, let us assume a class namely <font size="3"><span><tt><b>Employee</b></tt></span> </font>and it has a
constructor called copy constructor which expects only one argument of
type <font size="3"><tt><span><b>Employee</b></span></tt></font>.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b>Let’s see an example</b></div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Employee {
private int empoyeeId;
private String employeeName;
private Department department;
public int getEmpoyeeId() {
return empoyeeId;
}
public void setEmpoyeeId(int empoyeeId) {
this.empoyeeId = empoyeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Employee(int id, String name, Department department) {
this.id = id;
this.name = name;
this.department = department;
}
//copy constructor
public Employee(Employee oldEmployee) {
this.id = oldEmployee.id;
this.name = oldEmployee.name;
this.department = oldEmployee.department; //shallow cloning
}
} </pre>
</div>
</div>
<div style="text-align: left;">
Class Department:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Department
{
private int id;
private String name;
public Department(int id, String name)
{
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Department(int id, String name) {
this.id = id;
this.name = name;
}
//copy constructor
public Department(Department oldDepartment) {
this.id = oldDepartment.id;
this.name = oldDepartment.name;
}
}</pre>
</div>
</div>
<div style="text-align: left;">
Test Class</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="container" style="text-align: left;">
<div class="line number1 index0 alt2">
<pre class="java" name="code">public class CopyConstructorTest {
public static void main(String[] args) {
Department department = new Department(1, "Finance");
Employee originalEmployee = new Employee(1, "Ram", department);
Employee clonedEmployee = new Employee(originalEmployee);
System.out.println("Original:- " + originalEmployee);
System.out.println("Duplicate:- " + clonedEmployee);
System.out.println();
clonedEmployee.setId(2);
clonedEmployee.setName("Laxman");
clonedEmployee.getDepartment().setName("HR");
System.out.println("Original:- " + originalEmployee);
System.out.println("Duplicate:- " + clonedEmployee);
}
}</pre>
<font size="3"><b><span style="color: #38761d;"><span style="font-family: inherit;"><span><code class="java plain">Output</code></span></span></span></b></font></div><font size="3">
</font><div class="line number16 index15 alt1">
<font size="3"><span style="color: #38761d;"><span style="font-family: inherit;"><span><code class="java plain">============================================================================</code></span></span></span></font></div><font size="3">
</font><div class="line number16 index15 alt1"><font size="3">
</font><div class="container"><font size="3">
</font><div class="line number1 index0 alt2">
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Original:- Employee Id: 1 Employee Name: Ram Department Id: 1</code></span></span><br /></font>
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Department Name: Finance</code></span></span></font></div><font size="3">
</font><div class="line number2 index1 alt1">
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Duplicate:- Employee Id: 1 Employee Name: Ram Department Id: 1</code></span></span><br /></font>
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Department Name: Finance</code></span></span></font></div><font size="3">
</font><div class="line number4 index3 alt1">
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Original:- Employee Id: 1 Employee Name: Ram Department Id: 1</code></span></span><br /></font>
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Department Name: HR</code></span></span></font></div><font size="3">
</font><div class="line number5 index4 alt2">
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Duplicate:- Employee Id: 2 Employee Name: Laxman Department Id: 1</code></span></span><br /></font>
<font size="3"><span style="font-family: inherit;"><span><code class="plain plain">Department Name: HR</code></span></span></font></div>
</div>
</div>
</div>
</div>
<div style="text-align: left;">
What happens in the above example is, when we change the department name of <b>clonedEmployee</b>, the change comes up with the <b>originalEmployee</b> also. Why it behaves so because what we implement here is <b>shallow cloning</b></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Let’s have a small change in the copy constructor of Employee class<b> to implement Deep cloning</b>
</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public Employee(Employee oldEmployee) {
this.id = oldEmployee.id;
this.name = oldEmployee.name;
this.department = newDepartment(oldEmployee.department); //deep cloning
}
</pre>
</div>
</div>
<div style="text-align: left;">
Now we test again and the output is</div>
<div style="text-align: left;">
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div class="container">
<div class="line number1 index0 alt2">
<code class="plain plain">Original:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance</code></div>
<div class="line number2 index1 alt1">
<code class="plain plain">Duplicate:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance</code></div>
<div class="line number3 index2 alt2">
</div>
<div class="line number4 index3 alt1">
<code class="plain plain">Original:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance</code></div>
<div class="line number5 index4 alt2">
<code class="plain plain">Duplicate:- Employee Id: 2 Employee Name: Laxman Department Id: 1 Department Name: HR</code></div>
</div>
</div>
</div>
<div style="text-align: left;">
Now everything goes fine and this is what we call <b>deep cloning</b> using copy constructors.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
But wait until Inheritance comes</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
let's have one class Manager which inherit Employee </div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Class Manager:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Manager extends Employee{
private int managerId;
public int getManagerId() {
return managerId;
}
public void setManagerId(int managerId) {
this.managerId = managerId;
}
public Manager (Employee obj, int ManagerId) {
super(obj);
this.managerId= ManagerId;
}
public Manager(Manager obj) {
super(obj);
this.managerId= obj.managerId;
}
}
</pre>
</div>
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Test class:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class TestCloning {
public static void main(String[] args) {
Department department1 = new Department(1, "Finance");
Department department2 = new Department(2, "It");
Employee employee1 = new Employee(1, "Ram", department1);
Employee employee2 = new Employee(1, "Laxman", department2);
Manager manager1 = new Manager(employee2,1);
Employee clone1 = new Employee(employee1);
Employee clone2 = new Employee(manager1);
System.out.println("clone1:- " +clone1.toString());
System.out.println(clone1.getClass());
System.out.println("clone2:- " + clone2.toString());
System.out.println(clone2.getClass());
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<b><span style="color: #38761d;">Output</span></b></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="color: #38761d;">===================================================================</span></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
clone1:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance<br />
<span style="color: #38761d;">class com.Employee</span><br />
clone2:- Employee Id: 1 Employee Name: Laxman Department Id: 2 Department Name: It<br />
<span style="background-color: #38761d;"><span style="background-color: white;"><span style="color: #38761d;">class com.Employee</span></span></span><span style="color: #38761d;"><span style="background-color: white;"></span></span></div>
</div>
<div style="text-align: left;">
What just happened here? We passed Manger object to clone2 to but we got Employee class object after cloning.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="font-size: large;"><b>3. Deep cloning by The Factory Method</b>:</span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In certain situations we can’t make our copy constructor public, so it
has to be private. Now we need to think about an equivalent and yes,
fortunately we are able to find out another workaround for achieving the
same result- <b>The Factory Method</b>. Let’s have a look.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Class Employee<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Employee {
private String name;
private int id;
private Department department;
public Department getDepartment() {
return department;
}
public String getName() {
return name;
}
public int getId() {
return id;
}
public void setDepartment(Department department) {
this.department = department;
}
public void setName(String name) {
this.name = name;
}
public void setId(int id) {
this.id = id;
}
public Employee(int id, String name, Department department) {
this.id = id;
this.name = name;
this.department = department;
}
private Employee(Employee oldEmployee) {
this.id = oldEmployee.id;
this.name = oldEmployee.name;
//deep cloning
this.department = new Department(oldEmployee.department);
}
@Override
public String toString() {
return "Employee Id: " + id + "\tEmployee Name: " + name + "\t"
+ department;
}
public static Employee copy(Employee originalEmployee) {
return new Employee(originalEmployee);
}
}
</pre>
</div>
</div>
Test Class:<br />
<br />
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class TestCloning {
public static void main(String[] args) {
Department department = new Department(1, "Finance");
Employee originalEmployee = new Employee(1, "Ram", department);
Employee clonedEmployee = Employee.copy(originalEmployee);
System.out.println("Original:- " + originalEmployee);
System.out.println("Duplicate:- " + clonedEmployee);
System.out.println();
clonedEmployee.setEmployeeId(2);
clonedEmployee.setEmployeeName("Laxman");
clonedEmployee.getDepartment().setName("HR");
System.out.println("Original:- " + originalEmployee);
System.out.println("Duplicate:- " + clonedEmployee);
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<b><span style="color: #38761d;"><span style="font-family: inherit;"><span style="font-size: small;">Output</span></span></span></b></div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span style="color: #38761d;"><span style="font-family: inherit;"><span style="font-size: small;">===================================================================</span></span></span></div>
<div class="code" style="padding: 2px 4px; text-align: left; vertical-align: top;">
<span style="font-family: inherit;"><span style="font-size: small;">Original:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance<br />Duplicate:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance<br /><br />Original:- Employee Id: 1 Employee Name: Ram Department Id: 1 Department Name: Finance<br />Duplicate:- Employee Id: 2 Employee Name: Laxman Department Id: 1 Department Name: HR</span></span></div>
</div>
<h3 style="text-align: left;">
4. Deep cloning with serialization</h3>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-weight: normal;">Java serialization is convenient. Many classes are made serializable by simply declaring them to implement <code>java.io.Serializable</code>. Thus, a whole hierarchy of classes can be made cloneable by deriving them from a base <code>Serializable</code> class </span></span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Lets see the code sample:</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<code class="java plain"></code></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: "times new roman"; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow: auto hidden; text-align: left; width: 610px;">
<pre class="java" name="code">public Employee clone(Employee obj) {
try
{
ByteArrayOutputStream out = new ByteArrayOutputStream ();
ObjectOutputStream oout = new ObjectOutputStream (out);
oout.writeObject (obj);
ObjectInputStream in = new ObjectInputStream (
new ByteArrayInputStream (out.toByteArray ()));
//This returned Employee object will be a cloned object
return (Employee)in.readObject ();
}
catch (Exception e)
{
throw new RuntimeException ("cannot clone class [" +
obj.getClass ().getName () + "] via serialization: " +
e.toString ());
}
}</pre>
</div>
<div style="text-align: left;">
<span style="font-size: small;"><span style="font-family: inherit;">For more details about Serialization refer to<a href="http://binary-imaginers.blogspot.in/2014/05/serialization-in-java.html"> serialization in Java</a>.</span></span></div>
<h3 style="text-align: left;">
</h3>
<h4 style="text-align: left;">
The Summery</h4>
<h3 style="text-align: left;">
</h3>
<div style="text-align: left;">
The following table recaps the properties of all
cloning approaches from several perspectives: speed,
resource utilization, class design constraints, object graph handling.</div>
<div style="text-align: left;">
<br /></div>
<div class="table-wrapper" style="text-align: left;">
<table bgcolor="" border="0" cellpadding="0" cellspacing="1">
<tbody>
<tr>
<td><div class="table-wrapper">
<table border="0" cellpadding="5" cellspacing="1">
<tbody>
<tr>
<td align="center" bgcolor="" colspan="2">Object.clone()</td>
</tr>
<tr bgcolor="">
<td>Speed</td>
<td>High</td>
</tr>
<tr bgcolor="">
<td>Resource utilization</td>
<td>Low</td>
</tr>
<tr bgcolor="">
<td>Class design constraints</td>
<td>Does not work with deep final fields; does not work with inner classes; must implement <code>Cloneable</code>; medium amount of manual class maintenance</td>
</tr>
<tr bgcolor="">
<td>Object graphs</td>
<td>Does not handle object graphs transparently</td>
</tr>
<tr>
<td align="center" bgcolor="" colspan="2">Copy construction</td>
</tr>
<tr bgcolor="">
<td>Speed</td>
<td>High</td>
</tr>
<tr bgcolor="">
<td>Resource utilization</td>
<td>Low</td>
</tr>
<tr bgcolor="">
<td>Class design constraints</td>
<td>Superclasses and subclasses must cooperate; copy constructor required; a lot of manual class maintenance</td>
</tr>
<tr bgcolor="">
<td>Object graphs</td>
<td>Does not handle object graphs transparently</td>
</tr>
<tr>
<td align="center" bgcolor="" colspan="2">Serialization</td>
</tr>
<tr bgcolor="">
<td>Speed</td>
<td>Low</td>
</tr>
<tr bgcolor="">
<td>Resource utilization</td>
<td>High; creates redundant immutable fields</td>
</tr>
<tr bgcolor="">
<td>Class design constraints</td>
<td>Must implement <code>Serializable</code>; first non-<code>Serializable</code> class needs an accessible no-arg constuctor</td>
</tr>
<tr bgcolor="">
<td>Object graphs</td>
<td>Handles object graphs</td>
</tr>
<tr>
<td align="center" bgcolor="" colspan="2">Reflection</td>
</tr>
<tr bgcolor="">
<td>Speed</td>
<td>Medium</td>
</tr>
<tr bgcolor="">
<td>Resource utilization</td>
<td>Medium</td>
</tr>
<tr bgcolor="">
<td>Class design constraints</td>
<td>Does not work with final fields; does not work with inner classes; each class must provide no-arg constructor</td>
</tr>
<tr bgcolor="">
<td>Object graphs</td>
<td>Handles object graphs</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-13319315497623366852014-02-26T06:24:00.001-08:002014-06-03T08:11:18.334-07:00Tower of Hanoi solution using recursion in java<div dir="ltr" style="text-align: left;" trbidi="on">
Tower of hanoi is one of the basic questions to learn recursion and very commonly asked interview question at beginner and intermediate level.<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<div style="text-align: left;">
<span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Section in this post:</span></span></div>
<div style="text-align: left;">
<ol style="text-align: left;">
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Problem statement</span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Iterative solution</span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Alternate iterative solution </span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Recursive solution</span></span><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;"></span></span></li>
<li><span style="font-family: Times,"Times New Roman",serif;"><span style="font-size: small;">Java Implementation</span></span></li>
</ol>
</div>
</div>
</div>
</div>
</div>
<h1>
</h1>
</div>
</div>
</div>
The <a href="http://en.wikipedia.org/wiki/Tower_of_Hanoi" target="_blank"><b>Tower of Hanoi</b></a> (also called the <b>Tower of Brahma</b> or <b>Lucas' Tower</b>,<sup class="reference" id="cite_ref-1"></sup> and sometimes pluralised) is a mathematical game or puzzle.
It consists of three rods, and a number of disks of different sizes
which can slide onto any rod. The puzzle starts with the disks in a neat
stack in ascending order of size on one rod, the smallest at the top,
thus making a conical shape.<br />
The objective of the puzzle is to move the entire stack to another rod, obeying the following simple rules:<br />
<ol>
<li>Only one disk can be moved at a time.</li>
<li>Each move consists of taking the upper disk from one of the stacks
and placing it on top of another stack i.e. a disk can only be moved if
it is the uppermost disk on a stack.</li>
<li>No disk may be placed on top of a smaller disk.</li>
</ol>
With three disks, the puzzle can be solved in seven moves. The minimum
number of moves required to solve a Tower of Hanoi puzzle is 2<sup><i>n</i></sup> - 1, where <i>n</i> is the number of disks. <br />
<br />
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Iterative_solution">Iterative solution</span></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Iterative_solution"> </span></span></h4>
Alternate moves between the
smallest piece and a non-smallest piece. When moving the smallest piece,
always move it to the next position in the same direction (to the right
if the starting number of pieces is even, to the left if the starting
number of pieces is odd). If there is no tower position in the chosen
direction, move the piece to the opposite end, but then continue to move
in the correct direction. For example, if you started with three
pieces, you would move the smallest piece to the opposite end, then
continue in the left direction after that. When the turn is to move the
non-smallest piece, there is only one legal move. Doing this will
complete the puzzle in the fewest number of moves.<br />
<h4>
<span class="mw-headline" id="Simpler_statement_of_iterative_solution"> </span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Simpler_statement_of_iterative_solution">Simpler statement of iterative solution</span></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Simpler_statement_of_iterative_solution"> </span></span></h4>
Alternating between the smallest and the next-smallest disks, follow the steps for the appropriate case:<br />
For an even number of disks:<br />
<ul>
<li>make the legal move between pegs A and B</li>
</ul>
<ul>
<li>make the legal move between pegs A and C</li>
<li>make the legal move between pegs B and C</li>
<li>repeat until complete</li>
</ul>
For an odd number of disks:<br />
<ul>
<li>make the legal move between pegs A and C</li>
<li>make the legal move between pegs A and B</li>
<li>make the legal move between pegs C and B</li>
<li>repeat until complete</li>
</ul>
In each case, a total of 2<sup>n</sup>-1 moves are made.<br />
<br />
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Equivalent_iterative_solution">Equivalent iterative solution</span></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Equivalent_iterative_solution"> </span></span></h4>
<div style="text-align: left;">
Another way to generate the unique optimal iterative solution:</div>
<div style="text-align: left;">
Number the disks 1 through n (largest to smallest).</div>
<ul style="text-align: left;">
<li>If n is odd, the first move is from the Start to the Finish peg.</li>
<li>If n is even, the first move is from the Start to the Using peg.</li>
</ul>
<div style="text-align: left;">
Now, add these constraints:</div>
<ul style="text-align: left;">
<li>No odd disk may be placed directly on an odd disk.</li>
<li>No even disk may be placed directly on an even disk.</li>
<li>Never undo your previous move (that is, do not move a disk back to its immediate last peg).</li>
</ul>
<div style="text-align: left;">
Considering those constraints after the first move, there is only one legal move at every subsequent turn.</div>
<div style="text-align: left;">
The sequence of these unique moves is an optimal solution to the problem equivalent to the iterative solution described above.</div>
<div style="text-align: left;">
<br /></div>
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Recursive_solution">Recursive solution</span></span></h4>
<h4 style="text-align: left;">
<span style="color: #38761d;"><span class="mw-headline" id="Recursive_solution"> </span></span></h4>
A key to solving this puzzle is to recognize that it can be solved by
breaking the problem down into a collection of smaller problems and
further breaking those problems down into even smaller problems until a
solution is reached. For example:<br />
<ul>
<li>label the pegs A, B, C — these labels may move at different steps</li>
<li>let <i>n</i> be the total number of discs</li>
<li>number the discs from 1 (smallest, topmost) to <i>n</i> (largest, bottommost)</li>
</ul>
To move <i>n</i> discs from peg A to peg C:<br />
<ol>
<li>move <i>n</i>−1 discs from A to B. This leaves disc <i>n</i> alone on peg A</li>
<li>move disc <i>n</i> from A to C</li>
<li>move <i>n</i>−1 discs from B to C so they sit on disc <i>n</i></li>
</ol>
The above is a recursive algorithm, to carry out steps 1 and 3, apply the same algorithm again for <i>n</i>−1. The entire procedure is a finite number of steps, since at some point the algorithm will be required for <i>n</i> = 1. This step, moving a single disc from peg A to peg B, is trivial.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFrYRyhd2VVzSZ6dmLWJOvJ4Hj_2N_xaFvrUmsdjZBRl5PjuIwKNiX76rTwkt3NSfhWzNtqM9ehaVSe9_PQbHl4t8_rdO1-tR8911_9o1Lwle3ZogidQGNgQ7VzGdh-aWE7PtuxYp8Xu7k/s1600/300px-Tower_of_Hanoi_4.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFrYRyhd2VVzSZ6dmLWJOvJ4Hj_2N_xaFvrUmsdjZBRl5PjuIwKNiX76rTwkt3NSfhWzNtqM9ehaVSe9_PQbHl4t8_rdO1-tR8911_9o1Lwle3ZogidQGNgQ7VzGdh-aWE7PtuxYp8Xu7k/s1600/300px-Tower_of_Hanoi_4.gif" height="154" width="400" /></a></div>
<br />
<br />
Below is my Java code to solve the problem recursively.<br />
<br />
Class TowerOfHanoi:<br />
<br />
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 610px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class TowerOfHanoi {
public static void solveHanoi(int nTop, char fromTower, char midTower,
char toTower) {
if (nTop == 1){
System.out.println("Disk 1 from " + fromTower + " to " + toTower);
}else {
solveHanoi(nTop - 1, fromTower, toTower, midTower);
System.out.println("Disk " + nTop + " from " + fromTower
+ " to " + midTower);
solveHanoi(nTop - 1, midTower, fromTower, toTower);
}
}
public static void main(String[] args) {
int nDisks = 3;
solveHanoi(nDisks, 'A', 'B', 'C');
}
}
</pre>
<b><span style="color: #38761d;">output :</span></b><br />
<span style="color: #38761d;">===================================================================</span><br />
Disk 1 from A to C<br />
Disk 2 from A to B<br />
Disk 1 from C to B<br />
Disk 3 from A to C<br />
Disk 1 from B to A<br />
Disk 2 from B to C<br />
Disk 1 from A to C</div>
</div>
</div>
</div>
<h1>
</h1>
</div>
</div>
</div>
<br /></div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-69078712832737841582014-02-26T05:57:00.001-08:002014-05-19T03:55:47.565-07:00Factorial of a number using recursion in Java<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Java program to calculate factorial of integer using recursion<br />
<br />
<br />
public class Factorial<br />
{<br />
public int fact(int n) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if(n==1) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return 1;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>else {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return fact(n-1) * n;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>} <br />
}<br />
<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public static void main(String args[]){<br />
int number =4;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>Factorial factorial = new factorial();<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>System.out.println("The factorial of the number is : " + factorial.fact(number);<br />
}<br />
}</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-84191333465404893772014-02-20T21:59:00.004-08:002015-02-17T07:16:39.234-08:00Doubly Link List In Java<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
In my previous post I made a<a href="http://binary-imaginers.blogspot.in/2014/02/link-list-implementation-in-java.html" target="_blank"> simple link list</a> which holds integer values. Moving ahead in this post I am creating my own doubly link list .<br />
<br />
A <a href="http://en.wikipedia.org/wiki/Doubly_linked_list" target="_blank"><b>doubly-linked list</b></a> is a linked data structure that consists of a set of sequentially linked records called nodes. Each node contains two fields, called <i>links</i>, that are references to the previous and to the next node in the sequence of nodes.<br />
<br />
The beginning and ending nodes' <b>previous</b> and <b>next</b> links, respectively, point to some kind of terminator, typically a sentinel node or null,
to facilitate traversal of the list.<br />
<br />
It can
be conceptualized as two <a href="http://binary-imaginers.blogspot.in/2014/02/link-list-implementation-in-java.html" title="Linked list">singly linked lists</a> formed from the same data items, but in opposite sequential orders.<br />
<div class="thumb tnone">
<div class="thumbinner" style="width: 612px;">
<a class="image" href="http://en.wikipedia.org/wiki/File:Doubly-linked-list.svg"><img alt="A doubly-linked list whose nodes contain three fields: an integer value, the link to the next node, and the link to the previous node." class="thumbimage" data-file-height="41" data-file-width="610" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Doubly-linked-list.svg/610px-Doubly-linked-list.svg.png" height="41" width="610" /></a>
<br />
<div class="thumbcaption" style="text-align: left;">
<h4>
<span style="font-size: x-small;">A doubly-linked list whose nodes contain three
fields: an integer value, the link to the next node, and the link to
the previous node.</span></h4>
</div>
</div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li><code></code> Link List Interface</li>
<li>Link List Node</li>
<li>Implementation</li>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
<h1>
<span style="font-size: large;">Link List Interface</span></h1>
<h1>
<span style="font-size: large;"><span style="font-size: small;"><span style="font-weight: normal;">Below
is my Link List Interface. It is not at all mandatory to write
Interface for link list . I have written so as to make code more
understandable and to follow good code writing practices.</span></span></span></h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public interface LLInterface {
/*
* different overloaded insert
*/
public boolean insertAtStart(Node nodeToInsert);
public boolean insertAtStart(int data);
public boolean insertAtEnd(Node nodeToInsert);
public boolean insertAtEnd(int data);
public boolean insert(Node nodeToInsert, int loc);
public boolean insert(int data, int loc);
/*
* different overloaded delete
*/
public Integer deleteFirst();
public Integer deleteLast();
public Integer delete(int loc);
public boolean deleteThis(int data);
/*
* ADT method to know if list is empty
* we will be using this method at many places such as
* before deleting a node to make sure list is already not empty
*/
public boolean isEmpty();
/*
* ADT method to print entire list
*
*/
public void printList(Node head);
/* ADT method to get number of nodes present after the given node.
*If head is passed as argument then it will return size of list
*This method should be avoided at places such as,
*to validate given insertion or deletion location as it
*internally traverse complete list once.
*/
public int getSize(Node head);
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<h1>
</h1>
<h1>
Link List Node</h1>
<h1>
<b><span style="font-weight: normal;"><span style="font-size: small;">In </span></span></b><span style="font-size: small;"><span style="font-weight: normal;">Link
list data is stored in nodes. therefore let's see how to implement a
node. For the sake of simplicity I am considering nodes having only
integer values but this can be changed easily.</span></span></h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">public class Node {
// data variable will hold integer value
private int data;
//Reference(Pointer) to next node in list
private Node next;
//Reference(Pointer) to previous node in list
private Node prev;
public Node(int data) {
super();
this.data = data;
this.next = null;
this.prev = null;
}
public Node(){
super();
}
/*
* Getter and setters
*/
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext()
{
return next;
}
public void setNext(Node next) {
this.next = next;
}
public Node getPrev() {
return prev;
}
public void setPrev(Node prev) {
this.prev = prev;
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<h1>
Implementation</h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" name="code">package single;
public class SLL implements LLInterface {
private Node head;
@Override
public boolean insertAtStart(Node nodeToInsert) {
// Check if node is not null else return
// We add this check as there can be situation where object is set to
// null or
// some one has used default constructor make the node object etc.
if (nodeToInsert == null) {
System.out.println("Node you are trying to insert is null");
return false;
}
// check if list is empty then set node as head
if (isEmpty()) {
head = nodeToInsert;
}
// make nodeToInsert as head and head as second
// node(nodeToInsert-->head-->....)
else {
nodeToInsert.setNext(head);
head = nodeToInsert;
}
return true;
}
@Override
public boolean insertAtStart(int data) {
/*
* we can have two approaches to get new node
*
* First Approach: Use default constructor and then set values using
* setters
*
* Node nodeToInsert = new Node(); nodeToInsert.setData(data);
* nodeToInsert.setNext(null);
*
* Second approach: Use overloaded constructor of Node class
*/
Node nodeToInsert = new Node(data);
// As we already have a method to insert node at beginning having node
// object
// as parameter we will just call that
// else we can add all the code of that method here itself
return insertAtStart(nodeToInsert);
}
@Override
public boolean insertAtEnd(Node nodeToInsert) {
// Check if node is not null else return
// We add this check as there can be situation where object is set to
// null or
// one has used default constructor make the node object etc.
if (nodeToInsert == null) {
System.out.println("Node you are trying to insert is null");
return false;
}
// Check if list is empty then set node as head
if (isEmpty()) {
head = nodeToInsert;
return true;
}
Node currentNode = head;
while (currentNode.getNext() != null) {
currentNode = currentNode.getNext();
}
currentNode.setNext(nodeToInsert);
return true;
}
@Override
public boolean insertAtEnd(int data) {
/*
* we can have two approaches to get new node
*
* First Approach: Use default constructor and then set values using
* setters
*
* Node nodeToInsert = new Node(); nodeToInsert.setData(data);
* nodeToInsert.setNext(null);
*
* Second approach: Use overloaded constructor of Node class
*/
Node nodeToInsert = new Node(data);
// As we already have a method to insert node at end having node object
// as
// parameter we will just call that
// else we can add all the code of that method here itself
return insertAtEnd(nodeToInsert);
}
@Override
public boolean insert(Node nodeToInsert, int loc) {
// Check if node is not null else return
// We add this check as there can be situation where object is set to
// null or
// some one has used default constructor make the node object etc.
if (nodeToInsert == null) {
System.out.println("Node you are trying to insert is null");
return false;
}
// validate given location to add node, we wont check with list size
// here as
// it internally traverse complete list once
if (loc < 1) {
System.out.println("Invalid Location specifed to insert node");
return false;
}
if (loc == 1) {
insertAtStart(nodeToInsert);
} else {
Node currentNode = head;
// Now we will reach the required location so that we can add node
// there
// note that we will stop one place before we want to add node and
// keep in
// mind current node is already at first node i.e head
// e.g. if we want to add new node at location five, then we will
// traverse
// till node four
// we will also check whether current node is not null as location
// given
// can be more then list size
for (int i = 0; i < loc - 2 && currentNode != null; i++) {
currentNode = currentNode.getNext();
}
if (currentNode == null) {
System.out.println("Invalid Location specifed to insert node");
return false;
}
// Now we need to insert new node at this location
// so we will make new node's next to point to current node's next
// and current node will point to new node
// Note that order is important here
nodeToInsert.setNext(currentNode.getNext());
currentNode.setNext(nodeToInsert);
return true;
}
return false;
}
@Override
public boolean insert(int data, int loc) {
/*
* we can have two approaches to get new node
*
* First Approach: Use default constructor and then set values using
* setters
*
* Node nodeToInsert = new Node(); nodeToInsert.setData(data);
* nodeToInsert.setNext(null);
*
* Second approach: Use overloaded constructor of Node class
*/
Node nodeToInsert = new Node(data);
// As we already have a method to insert node at end having node object
// as parameter we will just call that
// else we can add all the code of that method here itself
return insert(nodeToInsert, loc);
}
@Override
public Integer deleteFirst() {
// Check if list is already Empty
if (isEmpty()) {
System.out.println("List is empty, can not eprform delete operation");
return null;
}
/* First save head value to return then Make head to point next node in the list
*Again order is important
*/
int deletedNodeValue = head.getData();
if(null != head.getNext()) {
head.getNext().setPrev(null);
head = head.getNext();
}
else {
head = null;
}
return deletedNodeValue;
}
@Override
public Integer deleteLast() {
// Check if list is already Empty
if (isEmpty()) {
System.out.println("List is empty, can not eprform delete operation");
return null;
}
Node currentNode = head;
// TODO
return null;
}
@Override
public Integer delete(int loc) {
// validate given location to delete node, we wont check with list size
// here
// as it internally traverse complete list once
if (loc < 1) {
System.out.println("Invalid Location specifed to delete node");
return null;
}
Node currentNode = head;
if (loc == 1) {
return deleteFirst();
}
// we will also check whether current node is not null as location given
// can
// be can be more then list size
for (int i = 0; i < loc - 2 && currentNode != null; i++) {
currentNode = currentNode.getNext();
}
if (currentNode == null) {
System.out.println("Invalid Location specifed to delete node");
return null;
}
int deletedNodeValue = currentNode.getData();
currentNode.setNext(currentNode.getNext().getNext());
return deletedNodeValue;
}
@Override
public boolean deleteThis(int data) {
if (head.getData() == data) {
return (deleteFirst()!= null);
}
// Check if list is already Empty
// We are checking isEmpty after checking for head data as deleteFirst
// also
// has list empty check
// and we do'nt want to execute this check twice by putting below
// isEmpty
// check at start of this method call
if (isEmpty()) {
System.out.println("List is empty, can not eprform delete operation");
return false;
}
Node currentNode = head;
//Iterate list until node to delete is reached or list ends
while (currentNode.getNext() != null) {
if (currentNode.getNext().getData() == data) {
currentNode.setNext(currentNode.getNext().getNext());
return true;
}
currentNode = currentNode.getNext();
}
System.out.println("data not present in the list");
return false;
}
/*
* This method will return true if List is Empty else false List will be
* empty when head is null
*/
@Override
public boolean isEmpty() {
return null == head;
}
@Override
public void printList(Node head) {
if (head == null) {
System.out.println("Invalid node given");
return;
}
Node currentNode = head;
System.out.print("List is: [");
while (currentNode != null) {
System.out.print(" "+currentNode.getData());
currentNode = currentNode.getNext();
}
System.out.println(" ]");
}
public void printList() {
if(head == null) {
System.out.println("Invalid node given");
return;
}
Node currentNode = head;
System.out.print("List is: [ ");
while(currentNode != null) {
System.out.print(currentNode.getData() +" ");
currentNode = currentNode.getNext();
}
System.out.println("]");
}
@Override
public int getSize(Node head) {
int count = 0;
Node currentNode = head;
while (currentNode != null) {
count++;
currentNode = currentNode.getNext();
}
return count;
}
public static void main(String[] args) {
SLL myLst = new SLL();
myLst.insert(new Node(41),0);
myLst.insert(new Node(42),2);
myLst.insert(new Node(43),1);
myLst.insert(new Node(44),1);
myLst.insert(new Node(45),2);
myLst.insert(new Node(46),4);
myLst.insert(null,3);
myLst.insert(51,0);
myLst.insert(52,2);
myLst.insert(53,1);
myLst.insert(54,1);
myLst.insert(55,2);
myLst.insert(56,4);
myLst.insertAtStart(1);
myLst.insertAtStart(2);
myLst.insertAtStart(3);
myLst.insertAtStart(4);
myLst.insertAtStart(new Node(11));
myLst.insertAtStart(new Node(12));
myLst.insertAtStart(new Node(13));
myLst.insertAtStart(new Node(14));
myLst.insertAtStart(null);
myLst.insertAtEnd(21);
myLst.insertAtEnd(22);
myLst.insertAtEnd(23);
myLst.insertAtEnd(24);
myLst.insertAtEnd(new Node(31));
myLst.insertAtEnd(new Node(32));
myLst.insertAtEnd(new Node(33));
myLst.insertAtEnd(new Node(34));
myLst.insertAtEnd(null);
myLst.printList(myLst.head);
System.out.println("===========================deletefirst=================");
myLst.deleteFirst();
myLst.deleteFirst();
myLst.deleteFirst();
myLst.printList(myLst.head);
System.out.println("=========delete from location==============");
myLst.delete(0);
myLst.delete(1);
myLst.delete(30);
myLst.delete(2);
myLst.printList(myLst.head);
System.out.println("=========delete this(data)========");
myLst.deleteThis(31);
myLst.deleteThis(131);
myLst.deleteThis(45);
myLst.printList(myLst.head);
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
</div>
<h1>
</h1>
<h1>
</h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
If we run the program we will get output like this:<br />
<br /></div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">==========================================================================</span></span></pre>
Invalid Location specifed to insert node<br />
Invalid Location specifed to insert node<br />
Node you are trying to insert is null<br />
Invalid Location specifed to insert node<br />
Node you are trying to insert, is null<br />
Node you are trying to insert is null<br />
List is: [14 13 12 11 4 3 2 1 54 55 53 56 44 52 45 43 46 21 22 23 24 31 32 33 34 ]<br />
===========================delecefirst================================<br />
List is: [11 4 3 2 1 54 55 53 56 44 52 45 43 46 21 22 23 24 31 32 33 34 ]<br />
============================deleteloc================================<br />
Invalid Location specifed to delete node<br />
Invalid Location specifed to delete node <br />
List is: [4 2 1 54 55 53 56 44 52 45 43 46 21 22 23 24 31 32 33 34 ]<br />
============================deletethis(data)============================<br />
data not present in the list<br />
List is: [4 2 1 54 55 53 56 44 52 43 46 21 22 23 24 32 33 34 ]<br />
============================deletelast================================<br />
34<br />
List is: [4 2 1 54 55 53 56 44 52 43 46 21 22 23 24 32 33 ]</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span> </code></span></span></div>
</div>
</div>
</div>
<h1>
</h1>
In next post we will talk about circular link list and then we will see some commonly asked question on link list.<br />
<br />
<br />
<br /></div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-78619087194490351362014-02-20T21:51:00.003-08:002018-05-03T23:47:35.746-07:00Link list Implementation in Java<div dir="ltr" style="text-align: left;" trbidi="on">
<html>
<head>
<title>
</title>
</head>
<body>
<div dir="ltr" style="text-align: left;">
<div dir="ltr" style="text-align: left;">
<div dir="ltr" style="text-align: left;">
<a href="http://en.wikipedia.org/wiki/Linked_list" target="_blank"><b>linked list</b></a> is a data structure consisting of a group of nodes which together represent a sequence. Under the simplest form, each node is composed of a data and a reference (in other words, a <i>link</i>) to the next node in the sequence. This structure allows for efficient insertion or removal of elements from any position in the sequence.<br />
<br />
<div class="center">
<a class="image" href="http://en.wikipedia.org/wiki/File:Singly-linked-list.svg"><img alt="Singly-linked-list.svg" data-file-height="41" data-file-width="408" height="41" src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Singly-linked-list.svg/408px-Singly-linked-list.svg.png" width="408"></a><br />
<small><i>A linked list whose nodes contain two fields: an integer value and a link to the next node. The last node is linked to a terminator used to signify the end of the list.</i></small>
</div>
<div class="center">
</div>
<div class="center">
<br />
<small><span style="font-size: x-small;">Linked lists are among the simplest and most common data structures. They can be used to implement several other common abstract data types, including lists (the abstract data type), stacks, queues, associative arrays.</span></small>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
<br />
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java" style="clear: none; float: none; line-height: 1.333; overflow: visible; width: auto;"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><b>Sections in this post:</b> </code></span></span></pre>
<ol style="text-align: left;">
<li><code></code> Link List Interface</li>
<li>Link List Node</li>
<li>Implementation</li>
</ol>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span></code></span></span>
</div>
</div>
</div>
</div>
<h1>
</h1>
<h1>
<span style="font-size: medium;">Link List Interface</span>
</h1>
<h1>
<span style="font-size: medium;"><span style="font-size: x-small;"><span style="font-weight: normal;">Below is my Link List Interface. It is not at all mandatory to write Interface for link list . I have written so as to make code more understandable and to follow good code writing practices.</span></span></span>
</h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java">public interface LLInterface {
/*
* different overloaded insert
*/
public boolean insertAtStart(Node nodeToInsert);
public boolean insertAtStart(int data);
public boolean insertAtEnd(Node nodeToInsert);
public boolean insertAtEnd(int data);
public boolean insert(Node nodeToInsert, int loc);
public boolean insert(int data, int loc);
/*
* different overloaded delete
*/
public Integer deleteFirst();
public Integer deleteLast();
public Integer delete(int loc);
public boolean deleteThis(int data);
/*
* ADT method to know if list is empty
* we will be using this method at many places such as
* before deleting a node to make sure list is already not empty
*/
public boolean isEmpty();
/*
* ADT method to print entire list
*
*/
public void printList(Node head);
/* ADT method to get number of nodes present after the given node.
*If head is passed as argument then it will return size of list
*This method should be avoided at places such as,
*to validate given insertion or deletion location as it
*internally traverse complete list once.
*/
public int getSize(Node head);
}
</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span></code></span></span>
</div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<h1>
Link List Node</h1>
<h1>
<b><span style="font-weight: normal;"><span style="font-size: x-small;">In</span></span></b> <span style="font-size: x-small;"><span style="font-weight: normal;">Link list data is stored in nodes. therefore let's see how to implement a node. For the sake of simplicity I am considering nodes having only integer values but this can be changed easily.</span></span></h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java">public class Node {
// data variable will hold integer
private int data;
// Reference(Pointer) to next node
private Node next;
public Node(int data) {
super();
this.data = data;
this.next = null;
}
public Node() {
super();
}
/*
* Getter and setters
*/
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}</pre>
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span></code></span></span>
</div>
</div>
</div>
<h3 style="text-align: left;">
</h3>
</div>
<br />
<h1>
Implementation</h1>
<h1>
<span style="font-size: x-small;"><span style="font-weight: normal;">Now lets see how to implement link list. Whenever I am saying link list I am referring to singly link list. refer my other posts for <a href="http://binary-imaginers.blogspot.in/2014/02/doubly-link-list-in-java.html">Doubly link list</a> and circular link list .</span></span>
</h1>
<div style="text-align: left;">
<div style="text-align: left;">
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="java">public class SLL implements LLInterface {
private Node head;
@Override
public boolean insertAtStart(Node nodeToInsert) {
/* Check if node is not null else return
* We add this check as there can be situation where object is set
* to null or some one has used default constructor make the node
* object etc.
*/
if (nodeToInsert == null) {
System.out.println("Node you are trying to insert is null");
return false;
}
// check if list is empty then set node as head
if (isEmpty()) {
head = nodeToInsert;
}
// make nodeToInsert as head and head as second
// node(nodeToInsert-->head-->....)
else {
nodeToInsert.setNext(head);
head = nodeToInsert;
}
return true;
}
@Override
public boolean insertAtStart(int data) {
/*
* we can have two approaches to get new node
*
* First Approach: Use default constructor and then set values
* using setters
* Node nodeToInsert = new Node();
* nodeToInsert.setData(data);
* nodeToInsert.setNext(null);
*
* Second approach: Use overloaded constructor of Node class
*/
Node nodeToInsert = new Node(data);
/* As we already have a method to insert node at beginning having
* node object as parameter we will just call that
* else we can add all the code of that method here itself
*/
return insertAtStart(nodeToInsert);
}
@Override
public boolean insertAtEnd(Node nodeToInsert) {
/* Check if node is not null else return
* We add this check as there can be situation where object
* is set to null or one has used default constructor make the node
* object etc.
*/
if (nodeToInsert == null) {
System.out.println("Node you are trying to insert is null");
return false;
}
// Check if list is empty then set node as head
if (isEmpty()) {
head = nodeToInsert;
return true;
}
Node currentNode = head;
while (currentNode.getNext() != null) {
currentNode = currentNode.getNext();
}
currentNode.setNext(nodeToInsert);
return true;
}
@Override
public boolean insertAtEnd(int data) {
/*
* we can have two approaches to get new node
* First Approach: Use default constructor and then set
* values using setters
* Node nodeToInsert = new Node();
* nodeToInsert.setData(data);
* nodeToInsert.setNext(null);
*
* Second approach: Use overloaded constructor of Node class
*/
Node nodeToInsert = new Node(data);
/* As we already have a method to insert node at end having
* node object as parameter we will just call that
* else we can add all the code of that method here itself
*/
return insertAtEnd(nodeToInsert);
}
@Override
public boolean insert(Node nodeToInsert, int loc) {
/* Check if node is not null else return
* We add this check as there can be situation where
* object is set to null or some one has used default constructor
* make the node object etc.
*/
if (nodeToInsert == null) {
System.out.println("Node you are trying to insert is null");
return false;
}
/* validate given location to add node, we wont check with list
* size here as it internally traverse complete list once
*/
if (loc < 1) {
System.out.println("Invalid Location specified to insert node");
return false;
}
if (loc == 1) {
insertAtStart(nodeToInsert);
} else {
Node currentNode = head;
/* Now we will reach the required location so that we can add
* node there.Note that we will stop one place before we want
* to add node and keep in mind current node is already at head
* e.g. if we want to add new node at location five, then we
* will traverse till node four.
* We will also check whether current node is not null
* as location given can be more then list size
*/
for (int i = 0; i < loc - 2 && currentNode != null; i++) {
currentNode = currentNode.getNext();
}
if (currentNode == null) {
System.out.println("Invalid Location specified to insert node");
return false;
}
/* Now we need to insert new node at this location.
* So we make new node's next to point to current node's next
* and current node will point to new node.
* Note that order is important here.
*/
nodeToInsert.setNext(currentNode.getNext());
currentNode.setNext(nodeToInsert);
return true;
}
return false;
}
@Override
public boolean insert(int data, int loc) {
/*
* we can have two approaches to get new node
*
* First Approach: Use default constructor and
* then set values using setters
*
* Node nodeToInsert = new Node();
* nodeToInsert.setData(data);
* nodeToInsert.setNext(null);
*
* Second approach: Use overloaded constructor of Node class
*/
Node nodeToInsert = new Node(data);
/* As we already have a method to insert node at end
* having node object as parameter we will just call that
* else we can add all the code of that method here itself
*/
return insert(nodeToInsert, loc);
}
@Override
public Integer deleteFirst() {
// Check if list is already Empty
if (isEmpty()) {
System.out.println("List empty,can not perform delete operation");
return null;
}
/* First save head value to return,then Make head to point next
* node in the list
* Again order is important
*/
int deletedNodeValue = head.getData();
head = head.getNext();
return deletedNodeValue;
}
@Override
public Integer deleteLast() {
//Check if list is already Empty
if(isEmpty()) {
System.out.println("List is empty, return null, can not perform delete operation");
return null;
}
if(head.getNext() == null) {
int deletedNode = head.getData() ;
head = null;
return deletedNode;
}
Node currentNode = head.getNext();
Node prevNode = head;
while(currentNode.getNext() != null) {
prevNode =currentNode;
currentNode = currentNode.getNext();
}
int deletedNode = currentNode.getData();
currentNode = null;
prevNode.setNext(null);
return deletedNode;
}
@Override
public Integer delete(int loc) {
/* validate given location to delete node,
* we wont check with list size here
* as it internally traverse complete list once
*/
if (loc < 1) {
System.out.println("Invalid Location specified to delete");
return null;
}
Node currentNode = head;
if (loc == 1) {
return deleteFirst();
}
/* we will also check whether current node is not null
* as location given can be can be more then list size
*/
for (int i = 0; i < loc - 2 && currentNode != null; i++) {
currentNode = currentNode.getNext();
}
if (currentNode == null) {
System.out.println("Invalid Location specified to delete");
return null;
}
int deletedNodeValue = currentNode.getData();
currentNode.setNext(currentNode.getNext().getNext());
return deletedNodeValue;
}
@Override
public boolean deleteThis(int data) {
if (head.getData() == data) {
return (deleteFirst()!= null);
}
/* Check if list is already Empty
* We are checking isEmpty after checking for head data as
* deleteFirst also has list empty check
* and we don't want to execute this check twice
* by putting below isEmpty check at start of this method call
*/
if (isEmpty()) {
System.out.println("List empty,can not perform delete operation");
return false;
}
Node currentNode = head;
//Iterate list until node to delete is reached or list ends
while (currentNode.getNext() != null) {
if (currentNode.getNext().getData() == data) {
currentNode.setNext(currentNode.getNext().getNext());
return true;
}
currentNode = currentNode.getNext();
}
System.out.println("data not present in the list");
return false;
}
/*
* This method will return true if List is Empty else false.
* List will be empty when head is null
*/
@Override
public boolean isEmpty() {
return null == head;
}
@Override
public void printList(Node head) {
if (head == null) {
System.out.println("Invalid node given");
return;
}
Node currentNode = head;
System.out.print("List is: [");
while (currentNode != null) {
System.out.print(" "+currentNode.getData());
currentNode = currentNode.getNext();
}
System.out.println(" ]");
}
public void printList() {
if (head == null) {
System.out.println("Invalid node given");
return;
}
Node currentNode = head;
System.out.print("List is: [");
while (currentNode != null) {
System.out.print(" "+currentNode.getData());
currentNode = currentNode.getNext();
}
System.out.println(" ]");
}
@Override
public int getSize(Node head) {
int count = 0;
Node currentNode = head;
while (currentNode != null) {
count++;
currentNode = currentNode.getNext();
}
return count;
}
public static void main(String[] args) {
SLL myLst = new SLL();
myLst.insert(new Node(41),0);
myLst.insert(new Node(42),2);
myLst.insert(new Node(43),1);
myLst.insert(new Node(44),1);
myLst.insert(new Node(45),2);
myLst.insert(new Node(46),4);
myLst.insert(null,3);
myLst.insert(51,0);
myLst.insert(52,2);
myLst.insert(53,1);
myLst.insert(54,1);
myLst.insert(55,2);
myLst.insert(56,4);
myLst.insertAtStart(1);
myLst.insertAtStart(2);
myLst.insertAtStart(3);
myLst.insertAtStart(4);
myLst.insertAtStart(new Node(11));
myLst.insertAtStart(new Node(12));
myLst.insertAtStart(new Node(13));
myLst.insertAtStart(new Node(14));
myLst.insertAtStart(null);
myLst.insertAtEnd(21);
myLst.insertAtEnd(22);
myLst.insertAtEnd(23);
myLst.insertAtEnd(24);
myLst.insertAtEnd(new Node(31));
myLst.insertAtEnd(new Node(32));
myLst.insertAtEnd(new Node(33));
myLst.insertAtEnd(new Node(34));
myLst.insertAtEnd(null);
myLst.printList(myLst.head);
System.out.println("=================deletefirst===============");
myLst.deleteFirst();
myLst.deleteFirst();
myLst.deleteFirst();
myLst.printList(myLst.head);
System.out.println("=========delete from location==============");
myLst.delete(0);
myLst.delete(1);
myLst.delete(30);
myLst.delete(2);
myLst.printList(myLst.head);
System.out.println("=========delete this(data)=================");
myLst.deleteThis(31);
myLst.deleteThis(131);
myLst.deleteThis(45);
myLst.printList(myLst.head);
}
}</pre>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="text-align: left;">
<div style="text-align: left;">
<div style="text-align: left;">
If we run the program we will get output like this:<br />
<br />
</div>
<div class="wp_syntax" style="background-color: #f9f9f9; border: 1px solid silver; color: #110000; font-family: 'Times New Roman'; font-weight: normal; line-height: normal; margin: 0px 0px 1.5em; overflow-x: auto; overflow-y: hidden; text-align: left; width: 710px;">
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><b><span style="color: #38761d;"><span class="pln">Output</span></span></b></pre>
<pre class="prettyprint tryit prettyprinted" style="cursor: default;"><span style="color: #38761d;"><span class="pln">==========================================================================</span></span></pre>
Invalid Location specified to insert node<br />
Invalid Location specified to insert node<br />
Node you are trying to insert is null<br />
Invalid Location specified to insert node<br />
Node you are trying to insert is null<br />
Node you are trying to insert is null<br />
List is: [ 14 13 12 11 4 3 2 1 54 55 53 56 44 52 45 43 46 21 22 23 24 31 32 33 34 ]<br />
===========================deletefirst=============================<br />
List is: [ 11 4 3 2 1 54 55 53 56 44 52 45 43 46 21 22 23 24 31 32 33 34 ]<br />
==========================delete from location========================<br />
Invalid Location specified to delete node<br />
Invalid Location specified to delete node<br />
List is: [ 4 2 1 54 55 53 56 44 52 45 43 46 21 22 23 24 31 32 33 34 ]<br />
==========================delete this(data)==========================<br />
data not present in the list<br />
List is: [ 4 2 1 54 55 53 56 44 52 43 46 21 22 23 24 32 33 34 ]
</div>
<div class="code" style="padding: 2px 4px; vertical-align: top;">
<span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"><span class="content"><span class="block" style="margin-left: 0px !important;"><code class="comments"></code></span></span></code></span></span>
</div>
</div>
</div>
</div>
<h1>
</h1>
In next post we will talk about <a href="http://binary-imaginers.blogspot.in/2014/02/doubly-link-list-in-java.html" target="_blank">doubly Link List</a> and Circular Link List and then some commonly asked question based on link list.<br />
<br />
</div>
</body>
</html></div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-9624673300435450942011-12-28T23:17:00.000-08:002014-05-19T03:53:31.876-07:00Key codes for java script<div dir="ltr" style="text-align: left;" trbidi="on">
<!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <br />
<h2 style="margin-bottom: 4.2pt;">
<span style="color: #003399; font-family: Verdana; font-size: 11.5pt;">Key Code Reference Table</span></h2>
<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" id="Table1" style="border-collapse: collapse; border: none; mso-border-alt: solid #8DB6CA .75pt; width: 703px;"> <tbody>
<tr style="height: 20.95pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"> <td style="border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
0</div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
10</div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
20</div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Caps Lock</b></div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
30</div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
40</div>
</td> <td style="border-left: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Arrow Down</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 1;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
1</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
11</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
21</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
31</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
41</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 2;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
2</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
12</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
22</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
32</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
42</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 3;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
3</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
13</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Enter</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
23</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
33</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Page Up</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
43</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 4;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
4</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
14</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
24</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
34</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Page Down</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
44</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 5;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
5</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
15</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
25</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
35</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>End</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
45</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Insert</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 6;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
6</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
16</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Shift</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
26</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
36</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Home</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
46</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Delete</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 7;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
7</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
17</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Ctrl</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
27</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Esc</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
37</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Arrow Left</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
47</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 8;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
8</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Backspace</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
18</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Alt</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
28</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
38</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Arrow Up</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
48</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>0</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 9;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
9</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Tab</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
19</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Pause/Break</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
29</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
39</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Arrow Right</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
49</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>1</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 10;"> <td colspan="10" style="border-bottom: solid #8DB6CA 1.0pt; border-left: solid white 1.0pt; border-right: solid white 1.0pt; border-top: none; height: 20.95pt; mso-border-bottom-alt: #8DB6CA; mso-border-left-alt: white; mso-border-right-alt: white; mso-border-style-alt: solid; mso-border-top-alt: #8DB6CA; mso-border-top-alt: solid #8DB6CA .75pt; mso-border-width-alt: .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
</div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 11;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
50</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>2</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
60</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
70</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>f</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
80</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>p</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
90</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>z</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 12;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
51</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>3</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
61</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>=+</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
71</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>g</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
81</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>q</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
91</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Windows</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 13;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
52</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>4</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
62</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
72</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>h</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
82</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>r</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
92</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 14;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
53</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>5</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
63</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
73</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>i</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
83</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>s</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
93</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Right Click</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 15;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
54</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>6</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
64</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
74</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>j</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
84</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>t</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
94</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 16;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
55</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>7</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
65</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>a</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
75</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>k</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
85</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>u</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
95</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 17;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
56</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>8</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
66</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>b</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
76</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>l</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
86</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>v</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
96</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>0 (Num Lock)</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 18;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
57</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>9</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
67</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>c</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
77</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>m</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
87</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>w</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
97</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>1 (Num Lock)</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 19;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
58</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
68</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>d</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
78</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>n</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
88</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>x</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
98</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>2 (Num Lock)</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 20;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
59</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>;:</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
69</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>e</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
79</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>o</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
89</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>y</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
99</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>3 (Num Lock)</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 21;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
100</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>4 (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
110</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>. (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
120</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F9</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
130</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
140</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 22;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
101</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>5 (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
111</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>/ (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
121</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F10</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
131</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
141</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 23;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
102</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>6 (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
112</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F1</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
122</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F11</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
132</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
142</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 24;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
103</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>7 (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
113</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F2</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
123</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F12</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
133</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
143</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 25;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
104</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>8 (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
114</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F3</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
124</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
134</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
144</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Num Lock</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 26;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
105</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>9 (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
115</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F4</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
125</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
135</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
145</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>Scroll Lock</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 27;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
106</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>* (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
116</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F5</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
126</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
136</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
146</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 28;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
107</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>+ (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
117</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F6</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
127</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
137</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
147</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 29;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
108</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
118</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F7</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
128</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
138</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
148</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 30;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
109</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>- (Num Lock)</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
119</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>F8</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
129</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
139</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
149</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 31;"> <td colspan="10" style="border-bottom: solid #8DB6CA 1.0pt; border-left: solid white 1.0pt; border-right: solid white 1.0pt; border-top: none; height: 20.95pt; mso-border-bottom-alt: #8DB6CA; mso-border-left-alt: white; mso-border-right-alt: white; mso-border-style-alt: solid; mso-border-top-alt: #8DB6CA; mso-border-top-alt: solid #8DB6CA .75pt; mso-border-width-alt: .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
</div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 32;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
150</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
160</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
170</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
180</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
190</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>.></b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 33;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
151</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
161</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
171</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
181</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
191</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>/?</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 34;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
152</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
162</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
172</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
182</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>My Computer</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
192</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>`~</b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 35;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
153</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
163</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
173</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
183</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>My Calculator</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
193</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 36;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
154</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
164</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
174</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
184</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
194</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 37;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
155</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
165</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
175</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
185</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
195</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 38;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
156</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
166</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
176</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
186</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
196</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 39;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
157</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
167</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
177</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
187</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
197</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 40;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
158</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
168</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
178</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
188</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>,<</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
198</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 41;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
159</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
169</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
179</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
189</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
199</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 42;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
200</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
210</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
220</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>\|</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
230</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
240</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 43;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
201</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
211</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
221</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>]}</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
231</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
241</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 44;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
202</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
212</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
222</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>'"</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
232</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
242</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 45;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
203</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
213</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
223</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
233</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
243</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 46;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
204</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
214</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
224</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
234</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
244</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 47;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
205</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
215</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
225</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
235</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
245</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 48;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
206</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
216</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
226</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
236</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
246</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 49;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
207</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
217</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
227</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
227</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
227</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 50;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
208</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
218</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
228</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
238</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
248</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
<tr style="height: 20.95pt; mso-yfti-irow: 51; mso-yfti-lastrow: yes;"> <td style="border-top: none; border: solid #8DB6CA 1.0pt; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
209</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
219</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b>[{</b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
229</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
239</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div align="right" class="MsoNormal" style="text-align: right;">
249</div>
</td> <td style="border-bottom: solid #8DB6CA 1.0pt; border-left: none; border-right: solid #8DB6CA 1.0pt; border-top: none; height: 20.95pt; mso-border-alt: solid #8DB6CA .75pt; mso-border-left-alt: solid #8DB6CA .75pt; mso-border-top-alt: solid #8DB6CA .75pt; padding: 1.65pt 2.5pt 1.65pt 2.5pt;"><div class="MsoNormal">
<b> </b></div>
</td> </tr>
</tbody></table>
<div class="MsoNormal">
</div>
</div>
Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-19778568549645814122011-11-21T22:56:00.001-08:002014-05-19T03:53:43.802-07:00AJAX Notes<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div align="center" style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in; text-align: center;">
<st1:city w:st="on"><st1:place w:st="on"><b><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 18pt; line-height: 150%;">AJAX</span></b></st1:place></st1:city><b><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 18pt; line-height: 150%;"><o:p></o:p></span></b></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">1.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><st1:city w:st="on"><st1:place w:st="on"><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">AJAX</span></st1:place></st1:city><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">= Asynchronous JavaScript and XML</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">2.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><st1:place w:st="on"><st1:city w:st="on"><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">AJAX</span></st1:city></st1:place><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 9pt; line-height: 150%;"> applications are Browser and
platform independent </span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">3.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">XMLHttpRequest object: - is used to
exchange data with a server behind the scenes. This means that it is possible
to update parts of a web page without reloading the whole page.</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">4.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">Syntax for creating XMLHttpRequest
object:</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Variable
xmlhttp =new <span style="background: white; mso-bidi-font-weight: bold;">XMLHttpRequest
(); //for IE 7+, Firefox and chrome<o:p></o:p></span></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Variable
xmlhttp = new ActiveXObject (“Microsoft.XMLHTTP”); //for IE 5 and IE 6<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">5.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">To
handle both type of browser:<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Var
xmlhttp;<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">If (window.XMLHTTPRequest)<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">{<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in; text-indent: .25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">//
code for IE 7+, Firefox, chrome, opera, safari<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"> Xmlhttp= new XMLHTTPRequest ();<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">}<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Else<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">{<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"> // code for IE 5 and IE 6<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"> Xmlhttp= new ActiveXObject (“Microsoft.XMLHTTP”);<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">}<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">6.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">to
send a request to a server, we use open() and send() methods of XMLHttpRequest
object<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; text-indent: .25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">xmlhttp.open
(“GET”,”ajax.info.txt”,true);<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; text-indent: .25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">xmlhttp.send
();<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">7.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Syntax
is:<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; text-indent: .25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Open
(method,URL,async)<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; text-indent: .25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Send (String) //String
is only used for post<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">8.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Two
XMLHttpRequest object properties are:<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .75in; margin-right: 0in; margin-top: 0in; mso-list: l0 level2 lfo1; tab-stops: list .75in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">a.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">responseText<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .75in; margin-right: 0in; margin-top: 0in; mso-list: l0 level2 lfo1; tab-stops: list .75in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">b.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">responseXML<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">9.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">the
onereadystatechange event is triggered every time the ready state changes.<o:p></o:p></span></div>
<div style="background: white; margin-left: .25in; mso-list: l0 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<!--[if !supportLists]--><span style="font-family: Verdana; font-size: 9pt;">10.<span style="font: 7.0pt "Times New Roman";"> </span></span><!--[endif]--><span style="font-family: Verdana; font-size: 9pt;">Three important
properties of the XMLHttpRequest object:<o:p></o:p></span></div>
<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; width: 555px;">
<tbody>
<tr>
<td style="background: #E5EECC; border: solid #C3C3C3 1.0pt; mso-border-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 23.12%;" valign="top" width="23%">
<div class="MsoNormal">
<b><span style="font-family: Verdana; font-size: 9pt;">Property<o:p></o:p></span></b></div>
</td>
<td style="background: #E5EECC; border-left: none; border: solid #C3C3C3 1.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 76.88%;" valign="top" width="76%">
<div class="MsoNormal">
<b><span style="font-family: Verdana; font-size: 9pt;">Description<o:p></o:p></span></b></div>
</td>
</tr>
<tr>
<td style="border-top: none; border: solid #C3C3C3 1.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 23.12%;" valign="top" width="23%">
<div class="MsoNormal">
<span style="font-family: Verdana; font-size: 9pt;">onreadystatechange<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 76.88%;" valign="top" width="76%">
<div class="MsoNormal">
<span style="font-family: Verdana; font-size: 9pt;">Stores a function (or the name of a function) to be called
automatically each time the readyState property changes<o:p></o:p></span></div>
</td>
</tr>
<tr>
<td style="border-top: none; border: solid #C3C3C3 1.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 23.12%;" valign="top" width="23%">
<div class="MsoNormal">
<span style="font-family: Verdana; font-size: 9pt;">readyState<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 76.88%;" valign="top" width="76%">
<div class="MsoNormal">
<span style="font-family: Verdana; font-size: 9pt;">Holds the status of the XMLHttpRequest. Changes from 0 to 4:<span class="apple-converted-space"> </span><br />
0: request not initialized<span class="apple-converted-space"> </span><br />
1: server connection established<br />
2: request received<span class="apple-converted-space"> </span><br />
3: processing request<span class="apple-converted-space"> </span><br />
4: request finished and response is ready<o:p></o:p></span></div>
</td>
</tr>
<tr>
<td style="border-top: none; border: solid #C3C3C3 1.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 23.12%;" valign="top" width="23%">
<div class="MsoNormal">
<span style="font-family: Verdana; font-size: 9pt;">status<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt; width: 76.88%;" valign="top" width="76%">
<div class="MsoNormal">
<span style="font-family: Verdana; font-size: 9pt;">200: "OK"<br />
404: Page not found<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<br /></div>
</div>Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0tag:blogger.com,1999:blog-3622848623797326428.post-63626307429849687852011-11-17T23:41:00.001-08:002014-05-19T03:53:55.086-07:00JQuery short notes<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
1.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>JQuery is a JavaScript library</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
2.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>Features of JQuery</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>HTML element selection</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>HTML element manipulation</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>CSS manipulation</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>HTML event functions</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>JavaScript effect and animation</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><st1:city w:st="on"><st1:place w:st="on">AJAX</st1:place></st1:city></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>Utilities</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
3.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>To add JQuery to
a page</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
<head></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
<script
type=”text/javascript” src=”jquery.js”></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
</script></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
</head></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
JQury tag should
be inside <head > tag</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
4.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>Two version of JQuery are available</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>Minified</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>Uncompressed( for debugging and testing purpose)</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
5.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>To use hosted library from Google</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
<head></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
<script
=”http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js”></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
</script></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
</head></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
6.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>JQuery Syntax:</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
$(selector).action()</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
7.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>Document Ready function skeleton</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
$(document).ready(function){</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 117.0pt; mso-list: l1 level3 lfo1; tab-stops: list 117.0pt; text-indent: -.25in;">
-<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>- - - - - - - -</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 117.0pt; mso-list: l1 level3 lfo1; tab-stops: list 117.0pt; text-indent: -.25in;">
-<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span> - - - - - - - -</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 117.0pt; mso-list: l1 level3 lfo1; tab-stops: list 117.0pt; text-indent: -.25in;">
-<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span> - - -- - - - - -</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
});</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
This is done to
prevent any JQuery code from running before the document is finished loading </div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
Ex.:- Trying to hide an element that doesn’t exist</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .5in;">
Trying to get size of an image that
is not loaded</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 0in; mso-list: l1 level1 lfo1; tab-stops: list 0in; text-indent: 0in;">
8.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>JQuery selector allows to select HTML element by</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>Element name</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>Attribute name</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>Content</div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
9.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span>Element selector example:</div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("p") selects all <p>
elements.<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>$("p.intro") selects all <p>
elements with class="intro".<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span>$("p#demo") selects all <p>
elements with id="demo".<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div class="MsoNormal" style="line-height: 150%; margin-left: .25in; mso-list: l1 level1 lfo1; tab-stops: list 0in; text-indent: -.25in;">
10.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span>Attribute
selection Example:<span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana; font-size: 9pt; line-height: 150%;"> jQuery uses XPath expressions to select
elements with given attributes.</span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("[href]") select all elements with
a href attribute.<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("[href='#']") select all elements
with a href value equal to "#".<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("[href!='#']") select all elements
with a href attribute NOT equal to "#".<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("[href$='.jpg']") select all
elements with a href attribute that ends with ".jpg".<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in; mso-list: l1 level1 lfo1; tab-stops: list 0in .25in; text-indent: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">11.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">CSS
selection example:<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: 'Courier New'; font-size: 10pt; line-height: 150%;">$("p").css("background-color","blue");</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list 0in .25in; text-indent: -.5in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">12.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: 'Courier New'; font-size: 10pt; line-height: 150%;">Some more Examples</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: -.25in; margin-right: 0in; margin-top: 0in;">
<br /></div>
<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; width: 544px;">
<tbody>
<tr style="height: 9.4pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td style="background: #E5EECC; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<b><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Selector<o:p></o:p></span></b></div>
</td>
<td style="background: #E5EECC; border-left: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<b><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Example<o:p></o:p></span></b></div>
</td>
<td style="background: #E5EECC; border-left: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<b><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">Selects<o:p></o:p></span></b></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 1;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_all.asp"><span style="color: #900b09;">*</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("*")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All elements<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 2;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">.<em>class</em>.<em>class</em><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(".intro.demo")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All elements with the
classes "intro" and "demo"<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 3;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_first.asp"><span style="color: #900b09;">:first</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("p:first")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">The first p element<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 4;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_last.asp"><span style="color: #900b09;">:last</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("p:last")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">The last p element<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 5;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_even.asp"><span style="color: #900b09;">:even</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("tr:even")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All even tr elements<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 6;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_odd.asp"><span style="color: #900b09;">:odd</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("tr:odd")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All odd tr elements<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 7;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<br /></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<br /></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<br /></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 8;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_eq.asp"><span style="color: #900b09;">:eq(<em>index</em>)</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("ul li:eq(3)")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">The fourth element in a
list (index starts at 0)<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 9;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_gt.asp"><span style="color: #900b09;">:gt(<em>no</em>)</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("ul li:gt(3)")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">List elements with an index
greater than 3<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 10;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_lt.asp"><span style="color: #900b09;">:lt(<em>no</em>)</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("ul li:lt(3)")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">List elements with an index
less than 3<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 11;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_not.asp"><span style="color: #900b09;">:not(<em>selector</em>)</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("input:not(:empty)")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All input elements that are
not empty<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 12;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_animated.asp"><span style="color: #900b09;">:animated</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(":animated")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All animated elements<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.0pt; mso-yfti-irow: 13;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_contains.asp"><span style="color: #900b09;">:contains(<em>text</em>)</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(":contains('W3Schools')")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 10.0pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All elements which contains
the text<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 14;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_empty.asp"><span style="color: #900b09;">:empty</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(":empty")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 9.4pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All elements with no child
(elements) nodes<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 20.05pt; mso-yfti-irow: 15;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 20.05pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_attribute_equal_value.asp"><span style="color: #900b09;">[<em>attribute</em>=<em>value</em>]</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 20.05pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("[href='default.htm']")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 20.05pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All elements with a href
attribute value equal to "default.htm"<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 19.35pt; mso-yfti-irow: 16; mso-yfti-lastrow: yes;">
<td style="border-top: none; border: solid #C3C3C3 1.0pt; height: 19.35pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><a href="http://www.w3schools.com/jquery/sel_attribute_end_value.asp"><span style="color: #900b09;">[<em>attribute</em>$=<em>value</em>]</span></a><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 19.35pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$("[href$='.jpg']")<o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #C3C3C3 1.0pt; border-left: none; border-right: solid #C3C3C3 1.0pt; border-top: none; height: 19.35pt; mso-border-alt: solid #C3C3C3 .75pt; mso-border-left-alt: solid #C3C3C3 .75pt; mso-border-top-alt: solid #C3C3C3 .75pt; padding: 2.25pt 2.25pt 2.25pt 2.25pt;" valign="top"><div class="MsoNormal" style="line-height: 150%;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">All elements with a href
attribute value ending with ".jpg"<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list 0in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">13.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">To put
JQuery functions in a separate file is always a god idea. To use that js file<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: 'Courier New'; font-size: 10pt; line-height: 150%;"><head></span><span style="font-family: 'Courier New'; font-size: 10pt; line-height: 150%;"><br />
<span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><script type="text/javascript"
src="jquery.js"></script></span><br />
<span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"><script type="text/javascript"
src="my_jquery_functions.js"></script></span><br />
<span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial;"></head><o:p></o:p></span></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in; mso-list: l1 level1 lfo1; tab-stops: list 0in; text-indent: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">14.<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">The jQuery noConflict()
method specifies a custom name (like jq), instead of using the dollar sign.</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><html><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><head><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><script
type="text/javascript" src="jquery.js"></script><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><script
type="text/javascript"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">var
jq=jQuery.noConflict();<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 2.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level4 lfo1; tab-stops: list 2.0in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">-<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">jq(document).ready(function(){<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .75in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo2; tab-stops: list .75in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">-<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">- - - -
<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .75in; margin-right: 0in; margin-top: 0in; mso-list: l0 level1 lfo2; tab-stops: list .75in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">-<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">- - - - <o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"> });<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">});<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"></script><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"></head><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .5in; margin-right: 0in; margin-top: 0in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"></html><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">15.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"> The
syntax of jQuery's method for making custom animations is:<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in; text-indent: .5in;">
<span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">$(selector).animate({params},[duration],[easing],[callback])<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">16.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"> JavaScript
statements are executed line by line. However, with animations, the next line of code can be run even though the
animation is not finished. This can create errors. To prevent this, you can
create a callback function. A callback function is executed after the current
animation (effect) is finished.<o:p></o:p></span></div>
<h2 style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;">17.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;"> Changing HTML Content<o:p></o:p></span></h2>
<h3 style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; font-weight: normal; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;">$(selector).html(content)<o:p></o:p></span></h3>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(selector).append(content)<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(selector).prepend(content)<o:p></o:p></span></div>
<h3 style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; font-weight: normal; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;">$(selector).after(content)<o:p></o:p></span></h3>
<h3 style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: 1.0in; margin-right: 0in; margin-top: 0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; font-weight: normal; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;">$(selector).before(content)<o:p></o:p></span></h3>
<h3 style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;">18.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-weight: normal;">T</span><span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;">he css() method has three different syntaxes, to perform
different tasks.<o:p></o:p></span></h3>
<div class="MsoNormal" style="background: white; line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">css(name) - Return CSS property value<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">css(name,value) - Set CSS property and value<o:p></o:p></span></div>
<div class="MsoNormal" style="background: white; line-height: 150%; margin-left: 1.0in; mso-list: l1 level2 lfo1; tab-stops: list 1.0in; text-indent: -.25in;">
<span style="font-family: Symbol; font-size: 9pt; line-height: 150%;">·<span style="font: normal normal normal 7pt/normal 'Times New Roman';">
</span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">css({properties}) - Set multiple CSS
properties and values<o:p></o:p></span></div>
<h2 style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<span style="font-family: Verdana; font-size: 9pt; font-weight: normal; line-height: 150%;"><o:p> </o:p></span></h2>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">19.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">The
jQuery load() method is a simple (but very powerful) <st1:place w:st="on"><st1:city w:st="on">AJAX</st1:city></st1:place> function. It has the following syntax:<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in; text-indent: .25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">$(selector).load(url,<i>data,callback</i>)<o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in; text-indent: .25in;">
<br /></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin-bottom: 0in; margin-left: .25in; margin-right: 0in; margin-top: 0in; mso-list: l1 level1 lfo1; tab-stops: list .25in; text-indent: -.25in;">
<span style="font-family: Verdana; font-size: 9pt; line-height: 150%;">20.<span style="font: normal normal normal 7pt/normal 'Times New Roman';"> </span></span><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">$.ajax(options)</span><span class="apple-converted-space"><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana; font-size: 9pt; line-height: 150%;"> </span></span><span style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; font-family: Verdana; font-size: 9pt; line-height: 150%;">is the syntax of the low level <st1:place w:st="on"><st1:city w:st="on">AJAX</st1:city></st1:place> function.</span><span style="font-family: Verdana; font-size: 9pt; line-height: 150%;"><o:p></o:p></span></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<br /></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<br /></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<br /></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<br /></div>
<div style="background: white; line-height: 150%; margin-bottom: .0001pt; margin: 0in;">
<br /></div>
</div>Ashvin Bhidehttp://www.blogger.com/profile/12479991839198648126noreply@blogger.com0