Abstract: The present invention relates to a memory device (14) and a method thereof. The proposed memory device (14) comprises a memory (15) having a plurality of memory blocks (20). Each memory block (20) of the memory (15) is adapted to store multiple records of data. The memory device (14) further comprises data addressing means for addressing the data in said memory (15) using a start pointer (30) and an end pointer (40). The start pointer (30) is located in a memory block containing a starting record of a record sequence and comprises a first specified number of bytes (32) to identify said start pointer and at least one byte (34) to represent a first index of the starting record of said record sequence. The end pointer (40) is located in a memory block containing an end record of said record sequence and comprises a second specified number of bytes (42) to identify said end pointer (40) and at least one byte (44) to represent a second index of the end record of said sequence of records. The data addressing means is adapted to update said end pointer (40) by incrementing the second index each time a record is written on to said memory device. The data addressing means is also adapted to update said start pointer (30) by incrementing the first index each time one or more records are downloaded from said memory device.
Description
Memory device and method thereof
The present invention relates to memory devices, and in
particular, to memory management in erasable non-volatile
memory devices, such as flash memory.
Flash memory devices are commonly used in memory cards, and
in USB memory drives, such as thumb drives, handy drives,
memory sticks, flash sticks, jump drives, etc., for general
storage and transfer of data between computers and other
digital products. A flash memory typically comprises multiple
memory blocks, also referred to as pages, each page or block
being made up of several bytes. Flash memory differs from
other kinds of electrically erasable and programmable memory
(EEPROMs) in that while other kinds of EEPROMs are erasable
in small units, typically in bytes, a flash memory can be
erased page wise only. While this feature provides flash
memories with faster erase cycles than other kinds of
EEPROMs, it also means that for a flash memory, in order to
modify a single byte, the whole page or block needs to be
modified.
An important application of flash memory is in data logging,
wherein industrial data is logged into a flash memory. This
flash memory communicates with a processor which reads from
or writes into the flash page wise only. As mentioned above,
one page consists of several bytes. Thus, modifying a single
byte of information on the flash will lead to writing data on
the entire page. Every flash memory has finite life cycle,
defined by the total number of write/erase cycles it can be
subjected to without risk of data corruption. Data retention
in the flash memory is not guaranteed if this life cycle
expires. In general, each memory block of a flash memory may
have a guaranteed life about 10000 write/erase cycles.
2
In existing data logger products, log data is written on to
the flash linearly. To address the complete memory, a single
pointer (typically of 4 bytes) is used, which resides on the
first page of the flash memory. Every record of data logged
would update the pointer which thus requires writing a
complete one page data to update the pointer. Thus, the first
page of the flash will be updated every time data is logged
on to the flash, which utilizes the write/erase cycles of the
flash significantly and diminishes the life of the flash.
Further, in the exiting technique of linear data logging, if
data reaches the end of the flash, it is required to be moved
to the free memory at the beginning of the flash. This again
causes significant utilization of write/erase cycles of the
flash.
It is an object of the present invention to provide an
improved memory device and method thereof.
The above object is achieved by a memory device, comprising:
- a memory comprising a plurality of memory blocks, each
memory block adapted to store multiple records of data, and
- data addressing means for addressing the data in said
memory using a start pointer and an end pointer, wherein said
start pointer is located in a memory block containing a
starting record of a record sequence and comprises a first
specified number of bytes to identify said start pointer and
at least one byte to represent a first index of the starting
record of said record sequence, and said end pointer is
located in a memory block containing an end record of said
record sequence and comprises a second specified number of
bytes to identify said end pointer and at least one byte to
represent a second index of the end record of said sequence
of records,
wherein, said data addressing means is adapted to update said
end pointer by incrementing the second index each time a
record is written on to said memory device and to update said
start pointer by incrementing the first index each time one
or more records are downloaded from said memory device.
3
The above object is achieved by a method for memory
management of a memory device:
- dividing said .memory into a plurality of memory blocks,
each memory block adapted to store multiple records of data,
and
- addressing the data in said memory using a start pointer
and an end pointer, wherein said start pointer is located in
a memory block containing a starting record of a record
sequence and comprises a first specified number of bytes to
identify said start pointer and at least one byte to
represent a first index of the starting record of said record
sequence, and said end pointer is located in a memory block
containing an end record of said record sequence and
comprises a second specified number of bytes to identify said
end pointer and at least one byte to represent a second index
of the end record of said sequence of records,
wherein addressing the data in said memory comprises updating
said end pointer by incrementing the second index each time a
record is written on to said memory device and updating said
start pointer by incrementing the first index each time one
or more records are downloaded from said memory device.
The underlying idea of the present invention is to provide a
pointer implementation for writing of records on to the flash
which eliminates the problem of fixed place pointer updation,
hence requiring less writing on same page, which in turn
minimizes data logging corruption. This is achieved by a
circular pointer implementation which addresses the memory
using two pointers, namely, a start pointer and an end
pointer whose locations are not fixed, hence eliminating
repeated updation of a fixed pointer page.
In a preferred embodiment, said memory is a flash memory.
Since a flash memory has a finite life cycle, the present
invention is particularly advantageous in increasing the
life of the flash memory by reducing the number of
4
write/erase cycles that a memory block containing the
pointer is subjected to.
One embodiment of the present invention deals with a system
comprising a memory device as described above, and further
comprising means for logging records obtained from sensor
data on said memory device. In a further embodiment, the
system further comprises means for downloading records of log
data from said memory device to a host computer.
The present invention is further described hereinafter with
reference to illustrated embodiments shown in the
accompanying drawings, in which:
FIG 1 is a block diagram of a data logging system using a
memory device according one embodiment of the present
invention,
FIG 2 is a schematic diagram of the memory portion of the
memory device,
FIG 3 is a schematic diagram of a page or a memory block,
FIG 4 is a schematic illustration of the structure of a start
pointer,
FIG 5 is a schematic illustration of the structure of an end
pointer,
FIG 6 is a schematic illustration of a memory block when no
record is logged
FIG 7 is a schematic illustration of the memory block after
new data has been logged on to the memory,
FIG 8 is a schematic illustration of a scenario when the
start pointer page is the same as the end pointer page,
5
FIG 9 is a schematic illustration of a start pointer page in
a scenario when the start pointer page is less than the end
pointer page,
FIG 10 is a schematic illustration of an end pointer page in
a scenario when the start pointer page is less than the end
pointer page,
FIG 11 is a schematic illustration of an end pointer page in
a scenario when the start pointer page is greater than the
end pointer page, and
FIG 12 is a schematic illustration of a start pointer page in
a scenario when the start pointer page is greater than the
end pointer page.
The embodiments illustrated below describe the use of the
inventive memory device in a data logging system.
Referring now to FIG 1, a system 10 is illustrated that may
be used for industrial data logging, for example for time
attendance and access control of employees. The system 10
comprises a sensor 12, which may be, for example, an access
card reader. In an online operation, designated by the arrow
18, every time an employee swipes his/her access card at the
reader 12, the record from the access card is read by the
reader 12 and is logged to a host computer 16, which may be a
server. However, in an offline operation, designated by the
arrow 20, the data record read by the reader 12 is logged on
a memory device 14, which may include, for example, a flash
memory 15. At a latter stage, the memory device 14 may
communicate with the host computer 16 by a communication
channel 22, to download the records that were logged on to
the flash memory 15 in the offline condition.
FIG 2 schematically illustrates the functional blocks of the
flash memory 15. As shown, the flash memory 15 broadly
comprises a core memory 16 and a data memory 18. The core
6
memory 16, is a read only memory, and typically includes
software or instructions which provides the means for
reading, writing, and addressing data in data memory 18. The
data memory 18 is an erasable and re-writable memory
comprising a plurality of memory blocks 20, also referred to
as pages, for storing data. For example, a flash memory used
for data logging in access control may comprise 4095 such
memory blocks or pages. Each memory block 20 is capable of
storing several bytes of data. As shown in FIG 3, each memory
block 20 is capable of storing N records, each record
consisting of B bytes. In the illustrated embodiment, each
memory block 20 consists of 264 bytes. Each record is made up
of 12 bytes (i.e. B = 12), which means that it is possible to
store 22 records in one memory block (i.e. N = 22).
As mentioned earlier, every instance a record is logged on to
the flash memory 15, or downloaded from the flash memory 15,
the memory pointer in the flash memory 15 needs to be updated
to point to the memory location of the next record to be
logged on or downloaded respectively. In previously used
flash memories, only a single memory pointer, usually of four
bytes was used to address the entire flash memory. The page
or memory block which contains the pointer (usually the first
page of the flash) would thus get modified every time a new
record was logged on to the flash memory (in offline
condition), thus utilizing write/erase cycles of the flash,
and reducing its life. Given below is an exemplary
calculation of the life span of a pointer page of such a
flash memory having 264 bytes in one memory block, wherein
one record consists 12 bytes, and wherein each page or memory
block has a life of 10000 write/erase cycles. Assuming that
there are 1500 employees swiping a card four times a day
each, the pointer needs to be updated 1500*4=6000 times a
day. The total life span of the pointer page (in days) is
obtained by dividing the total number of permissible write
cycles by number of write cycles a day. Thus the life span
(in days) of the pointer page can be calculated to be
10000/6000, which is equal to 16.667 days. A further
7
disadvantage of such type of flash memories is that the
pointer page usually also contains reader information and
security information. Updating any of such information
further uses up the life of the flash, leading to errors in
boot-up time. Further, records are logged on to the free
portion of the data memory, and when the end of the free
portion is reached, the portion of the memory from where
records have been already downloaded to the host computer 16
is erased, and the records are shifted backwards by re-
writing the previous pages, thereby further reducing the
memory life.
In accordance with the present invention, flash memory 15 is
addressed by two pointers within indexing whose locations in
the flash memory are not fixed. The first pointer is referred
to as a start pointer, and resides at the starting location
of a page or memory block which contains the starting record
of a record sequence. In data logging, such a record sequence
may be referred as transaction log. The second pointer is
referred to as an end pointer, and resides in at the end
location of a page or memory block which contains the end
record of the record sequence or transaction log. FIG 4 and
FIG 5 illustrate the byte-wise structure of the start pointer
and the end pointer respectively. As shown in FIG 4, the
illustrated start pointer 30 may be made up of up to 12
bytes. The first three bytes 32 are used to identify the
start pointer 30 of the transaction log. In the illustrated
embodiment, the first three bytes 32 are assigned the
hexadecimal values ED, such that during boot-up, the start
pointer 30 is identified by three consecutive ED values at
the starting location. The fourth byte 34, referred to as
start record index (SRI), represents an index of the starting
location first record of the transaction log. The remaining
eight bytes 36 may are unused in the illustration but may be
reserved for future use. As shown in FIG 5, the illustrated
end pointer 40 may be made up of up to 12 bytes. Like in case
of the start pointer, the first three bytes 42 are used to
identify the end pointer 40 of the transaction log. In the
8
illustrated embodiment, the first three bytes 42 are assigned
the hexadecimal values EE, such that during boot-up, the end
pointer 40 is identified by three consecutive EE values at
the starting location. The fourth byte 44, referred to as end
record index (ERI), represents an index of the starting
location last record of the transaction log. The remaining
eight bytes 46 may are unused in the illustration but may be
reserved for future use.
FIG 6 is a schematic illustration of a memory block 50 when
no record is logged. Herein the start pointer 52 and the end
pointer 54 are located in the same page or memory block 50.
The start pointer is resides on the first location (i.e. the
Zeroth byte) of the page, while the end pointer resides on
the byte-wise position given by the number of bytes per page
minus record size, i.e. 264 - 12 =252. When there are no
records logged, both the SRI 56 and the ERI 58 have a value
of 1. As shown in FIG 7, when a new record 60 is logged, the
SRI remains the same, but the ERI is incremented by 1, i.e.
ERI=2, so as to point to the memory location where the next
record may be logged. In the illustrated example, the start
pointer 52 and the end pointer 54 are located in the same
page 50. As will be understood, when the transaction log
(when the number of records logged) exceeds 21, the start
pointer and end pointer will be on different pages.
Generally, the page that contains the end pointer is located
at or after the page that contains the start pointer.
However, the present invention provides for a circular memory
management implementation, wherein when logged in records
reach the end of the flash memory 15, new records are not
accommodated by shifting backwards existing records by re-
writing the previous pages, but are instead logged in from
the starting page of the flash memory in a circular fashion.
In such a case, the page that contains the start pointer may
be located after the page that contains the end pointer.
These three scenarios are illustrated in a latter section
referring to FIGs 8-12.
9
From the illustrated embodiment, it may be appreciated that
since the position of the end pointer is not fixed, but is
generally on the same page as the last record of the
transaction log, the number of pages to be updated for every
record logged is greatly reduced. The following calculation
illustrates the advantage of the present invention in data
logging in increasing the life span of the flash memory 15.
1 page of flash = 264 bytes
1 record of log = 12 bytes
1 Memory Write cycle page wise = 10000
Number of records per page = 264 / 12= 22
The total number of pages in flash is assumed to be 4095.
However, some of the pages may be used up for data such as
reader configuration, employee IDs, etc. In the illustrated
embodiment, 475 pages are used for the above purpose. Thus:
Total number of pages for logs = 4095 - 475= 3620
Assuming 1500 employees swiping cards 4 times a day, leading
to 6000 records logged per day:
Number of pages filled per day = 6000 / 22
Number of pages filled per day = 272.72
One Memory Cycle (O.M.C.) =
Total number of pages for logs / Number
of pages filled per day
Thus O.M.C. = 3620 / 272.72
Thus O.M.C. = 13.27 Days
One memory written 22 times per page due to 22 records.
Hence:
Total number of days of memory life = (O.M.C. X 10000) / 22
Total number of days of memory life = (13.27 X 10000) / 22
10
Total number of days of memory life = 6031.81
Hence:
Total number of years of memory life = 6031.81 / 365
Total number of years of memory life = 16.52 years
The following examples illustrate algorithms for downloading
records from the flash memory 15 to the host computer 16
under various scenarios. Referring to FIG 8, example 1 below
illustrates a downloading algorithm when the start pointer 62
and the end pointer 64 are located in the same page 60, i.e.
when the number of records in the transaction log is less
than or equal to 20. The shaded portion of the memory block
indicates records logged on to the memory block.
Example 1
1. If (ERI - SRI) > Requested Log
a. Read the Start Pointer Page
b. Number of bytes to copy = Requested Log * 12
c. Copy the content of the memory into the RAM till, from
SRI till SRI+ Number of bytes to copy
d. Set the SRI = SRI + Number of bytes to copy
e. Write into the flash again the start pointer with
updated SRI
2. If (ERI - SRI) <= Requested Log
a. Read the Start Pointer Page
b. Number of bytes to copy = (ERI - SRI)*12
c. Copy the content of the memory into the RAM till, from
SRI till SRI+ Number of bytes to copy
d. Set the SRI = ERI
e. Write into the flash again the start pointer with
•updated SRI
Referring to FIG 9 and FIG 10, example 2 below illustrates a
downloading algorithm when the start pointer 74 resides in a
11
page 70 and the end pointer 78 resides in a page 76 that is
located after the page 70. The shaded portion of the memory
blocks indicates records logged on to the memory blocks.
Example 2
Read the Start Pointer Page
a. Page = Start Pointer Page
b. Temp_SRI = SRI
c. While (Requested log)
d. Number of bytes = 2 64 - Temp_SRI *12;
e. If (22 - Temp_SRI) > Requested Log
i. SRI = Temp_SRI +Requested log
ii. Number of Bytes = Requested log*12
iii. Requested Log = 0;
iv. Update the SRI in the same page
f. Else
i. If Page == End Pointer Page
1. Number of bytes = ERI*12
2. Requested log = 0;
3. SRI = ERI;
ii. Else
1. Requested log = Requested log -22 + Temp_SRI;
iii. Temp_SRI = 0;
g. Read The page
i. For (cnt = 0; cnt< Number of bytes; cnt++)
k. Page = page +1;
Referring to FIG 11 and FIG 12, example 3 below illustrates a
downloading algorithm when the start pointer 86 resides in a
page 84 and the end pointer 82 resides in a page 80 that is
located after the page 84. The shaded portion of the memorys
block indicates records logged on to the memory blocks.
Example 3
12
Read the Start Pointer Page
a. Page = Start Pointer Page
b. Temp_SRI = SRI
c. While (Requested log)
d. Number of bytes = 2 64 - Temp_SRI * 12
e. If (22 - Temp__SRI) >Requested Log
■i. Temp_SRI = Requested log
ii. Number of Bytes = Requested log * 12
iii. Update the SRI in the same page
f. Else
i. Temp_SRI = 0;
ii. If Page = End Pointer Page
1. Number of bytes = ERI * 12
2. Requested log = ERI;
3. Else
iii. Requested log = Requested log -22 + Temp_SRI;
g. Read The page
h. For (cnt = 0; cnt< Number of bytes; cnt++)
i. Page = page +1;
j. Page = Page % MAX _ PAGE_LIMIT
k. If(Page == 0){ START_PAGE_LIMIT}
The present invention is advantageous in a number of ways. It
provides a unique pointer implementation for logging of
records on to the flash and eliminates the problem of fixed
place pointer updation, hence requiring less writing on same
page, which minimize data logging corruption. Start pointer
and end pointer are used to find out the information area and
numbers of logs and both the pointers are written on
different places according to log and download data from the
remote software. Few more variants like memory overflow flag
also be written along with the end pointer which again
minimize writing on same page of a variable on the flash.
Summarizing, the present invention relates to a memory device
and a method thereof. The proposed memory device comprises a
memory having a plurality of memory blocks. Each memory block
13
of the memory is adapted to store multiple records of data.
The memory device further comprises data addressing means for
addressing the data in said memory using a start pointer and
an end pointer. The start pointer is located in a memory
block containing a starting record of a record sequence and
comprises a first specified number of bytes to identify said
start pointer and at least one byte to represent a first
index of the starting record of said record sequence. The end
pointer is located in a memory block containing an end record
of said record sequence and comprises a second specified
number of bytes to identify said end pointer and at least one
byte to represent a second index of the end record of said
sequence of records. The data addressing means is adapted to
update said end pointer by incrementing the second index each
time a record is written on to said memory device. The data
addressing means is also adapted to update said start pointer
by incrementing the first index each time one or more records
are downloaded from said memory device.
Although the invention has been described with reference to
specific embodiments, this description is not meant to be
construed in a limiting sense. Various modifications of the
disclosed embodiments, as well as alternate embodiments of
the invention, will become apparent to persons skilled in the
art upon reference to the description of the invention. It is
therefore contemplated that such modifications can be made
without departing from the spirit or scope of the present
invention as defined.
14
Patent claims
1. A memory device (14), comprising:
- a memory (15) comprising a plurality of memory
blocks (20), each memory block (20) adapted to
store multiple records of data, and
- data addressing means for addressing the data in
said memory (15) using a start pointer (30) and an
end pointer (40), wherein said start pointer (30)
is located in a memory block containing a starting
record of a record sequence and comprises a first
specified number of bytes (32) to identify said
start pointer and at least one byte (34) to
represent a first index of the starting record of
said record sequence, and said end pointer (40) is
located in a memory block containing an end record
of said record sequence and comprises a second
specified number of bytes (42) to identify said end
pointer and at least one byte (44) to represent a
second index of the end record of said sequence of
records,
wherein, said data addressing means is adapted to
update said end pointer (40) by incrementing the
second index each time a record is written on to said
memory device and to update said start pointer (30)
by incrementing the first index each time one or more
records are downloaded from said memory device.
2. The memory device (14) of claim 1, wherein said memory
(15) is a flash memory.
3. A system (10) comprising a memory device (14) according
to any of claims 1 and 2, and further comprising means
for logging records obtained from sensor data on said
memory device (14).
15
4. The system (10) according to claim 3, further
comprising means for downloading records of log data
from said memory device (14) to a host computer (16).
5. A method for management of memory (15) of a memory
device (14):
- dividing said memory (15) into a plurality of memory
blocks (20), each memory block (20) adapted to
store multiple records of data, and
- addressing the data in said memory (15) using a
start pointer (30) and an end pointer (40), wherein
said start pointer (30) is located in a memory
block containing a starting record of a record
sequence and comprises a first specified number of
bytes (32) to identify said start pointer and at
least one byte (34) to represent a first index of
the starting record of said record sequence, and
said end pointer (40) is located in a memory block
containing an end record of said record sequence
and comprises a second specified number of bytes
(42) to identify said end pointer and at least one
byte (44) to represent a second index of the end
record of said sequence of records,
wherein, addressing the data in said memory comprises
updating said end pointer (40) by incrementing the
second index each time a record is written on to said
memory device and updating said start pointer (30)
by incrementing the first index each time one or more
records are downloaded from said memory device.
16
6. A system or method substantially as herein above
described in the specification with reference to the
accompanying drawings.
The present invention relates to a memory device (14) and a
method thereof. The proposed memory device (14) comprises a
memory (15) having a plurality of memory blocks (20). Each
memory block (20) of the memory (15) is adapted to store
multiple records of data. The memory device (14) further
comprises data addressing means for addressing the data in
said memory (15) using a start pointer (30) and an end
pointer (40). The start pointer (30) is located in a memory
block containing a starting record of a record sequence and
comprises a first specified number of bytes (32) to identify
said start pointer and at least one byte (34) to represent a
first index of the starting record of said record sequence.
The end pointer (40) is located in a memory block containing
an end record of said record sequence and comprises a second
specified number of bytes (42) to identify said end pointer
(40) and at least one byte (44) to represent a second index
of the end record of said sequence of records. The data
addressing means is adapted to update said end pointer (40)
by incrementing the second index each time a record is
written on to said memory device. The data addressing means
is also adapted to update said start pointer (30) by
incrementing the first index each time one or more records
are downloaded from said memory device.
| # | Name | Date |
|---|---|---|
| 1 | 502-KOL-2008 CORRESPONDENCE.pdf | 2017-07-20 |
| 1 | abstract-00502-kol-2008.jpg | 2011-10-06 |
| 2 | 502-KOL-2008-PA.pdf | 2011-10-06 |
| 2 | 502-KOL-2008 FIRST EXAMINATION REPORT.pdf | 2017-07-20 |
| 3 | 502-KOL-2008-FORM 6.pdf | 2011-10-06 |
| 3 | 502-KOL-2008 FORM 2.pdf | 2017-07-20 |
| 4 | 502-KOL-2008_EXAMREPORT.pdf | 2016-06-30 |
| 4 | 502-KOL-2008-FORM 3.pdf | 2011-10-06 |
| 5 | 502-KOL-2008-FORM 2.pdf | 2011-10-06 |
| 5 | 502-KOL-2008-ABANDONED LETTER.pdf | 2015-06-11 |
| 6 | 502-kol-2008-form 18.pdf | 2011-10-06 |
| 6 | 00502-kol-2008-abstract.pdf | 2011-10-06 |
| 7 | 502-KOL-2008-FORM 1.pdf | 2011-10-06 |
| 7 | 00502-kol-2008-claims.pdf | 2011-10-06 |
| 8 | 502-KOL-2008-CORRESPONDENCE.pdf | 2011-10-06 |
| 8 | 00502-kol-2008-correspondence others.pdf | 2011-10-06 |
| 9 | 502-KOL-2008-CORRESPONDENCE-1.1.pdf | 2011-10-06 |
| 9 | 00502-kol-2008-description complete.pdf | 2011-10-06 |
| 10 | 00502-kol-2008-drawings.pdf | 2011-10-06 |
| 10 | 502-KOL-2008-ASSIGNMENT.pdf | 2011-10-06 |
| 11 | 00502-kol-2008-form 1.pdf | 2011-10-06 |
| 11 | 00502-kol-2008-form 3.pdf | 2011-10-06 |
| 12 | 00502-kol-2008-form 2.pdf | 2011-10-06 |
| 13 | 00502-kol-2008-form 1.pdf | 2011-10-06 |
| 13 | 00502-kol-2008-form 3.pdf | 2011-10-06 |
| 14 | 00502-kol-2008-drawings.pdf | 2011-10-06 |
| 14 | 502-KOL-2008-ASSIGNMENT.pdf | 2011-10-06 |
| 15 | 00502-kol-2008-description complete.pdf | 2011-10-06 |
| 15 | 502-KOL-2008-CORRESPONDENCE-1.1.pdf | 2011-10-06 |
| 16 | 00502-kol-2008-correspondence others.pdf | 2011-10-06 |
| 16 | 502-KOL-2008-CORRESPONDENCE.pdf | 2011-10-06 |
| 17 | 00502-kol-2008-claims.pdf | 2011-10-06 |
| 17 | 502-KOL-2008-FORM 1.pdf | 2011-10-06 |
| 18 | 00502-kol-2008-abstract.pdf | 2011-10-06 |
| 18 | 502-kol-2008-form 18.pdf | 2011-10-06 |
| 19 | 502-KOL-2008-ABANDONED LETTER.pdf | 2015-06-11 |
| 19 | 502-KOL-2008-FORM 2.pdf | 2011-10-06 |
| 20 | 502-KOL-2008_EXAMREPORT.pdf | 2016-06-30 |
| 20 | 502-KOL-2008-FORM 3.pdf | 2011-10-06 |
| 21 | 502-KOL-2008-FORM 6.pdf | 2011-10-06 |
| 21 | 502-KOL-2008 FORM 2.pdf | 2017-07-20 |
| 22 | 502-KOL-2008-PA.pdf | 2011-10-06 |
| 22 | 502-KOL-2008 FIRST EXAMINATION REPORT.pdf | 2017-07-20 |
| 23 | abstract-00502-kol-2008.jpg | 2011-10-06 |
| 23 | 502-KOL-2008 CORRESPONDENCE.pdf | 2017-07-20 |