Advantages of Vectors in R:
Simple and Efficient:
Vectors are easy to create and manipulate using built-in R
functions.
Element-wise operations make mathematical computations very concise
and fast.
Memory Efficient:
Since all elements are of the same type, vectors use memory
efficiently compared to other data structures like lists.
Supports Vectorized Operations:
Operations can be performed on entire vectors without writing loops,
leading to clean and efficient code.
Foundation for Advanced Structures:
Vectors are building blocks for matrices, data frames, and
arrays.
Rich Set of Functions:
R provides many vector-specific functions (length(), sum(), mean(),
sort(), etc.) for data manipulation.
Disadvantages of Vectors in R:
Same Data Type Only:
All elements in a vector must be of the same type. Mixing data types
automatically coerces them to a common type (which might lead to
unexpected results).
## Example:
v <- c(1, "apple") # numeric coerced to character → "1"
v
[1] "1" "apple"
Cannot hold heterogeneous data like lists or tables where each
element has a different type or structure.
No Key/Value Pairing:
Vectors don’t support named access like dictionaries or hash maps in
other languages (except with named vectors, which have limitations).
Not Hierarchical:
Vectors are flat structures. Nested or multi-level data is better
handled using lists or data frames.
Summary
Vectors in R are best used when we need to store a simple collection
of homogeneous data—such as all numeric values, all character strings,
or all logical values. They are ideal for performing arithmetic or
logical operations on multiple values at once and are commonly used in
statistical functions that require numeric inputs. Vectors also offer
good performance in simulations and numerical computations, making them
a fundamental structure in R for many mathematical and statistical
tasks.
However, vectors should be avoided when working with heterogeneous
data types, such as a mix of text, numbers, and booleans. If your data
needs to be organized into rows and columns, a data frame is a better
choice. For representing key-value pairs, nested structures, or
hierarchical data, lists are more appropriate. Additionally, for
large-scale tabular data that requires efficient indexing or column-wise
operations, consider using data frames or tibbles (from the dplyr
package) instead.
Types of Vectors
Numeric |
Numbers (default type) |
c(1, 2.5, 3.14) |
Integer |
Whole numbers |
c(1L, 2L, 3L) |
Character |
Text strings |
c("apple", "banana", "cherry") |
Logical |
TRUE / FALSE values |
c(TRUE, FALSE, TRUE) |
Complex |
Complex numbers |
c(1+2i, 3+4i) |
Creating Vectors
We can create a vector using the c()
(combine)
function.
# Numeric vector
numbers <- c(10, 20, 30)
print(numbers)
[1] 10 20 30
# Character vector
names <- c("Alice", "Bob", "Charlie")
print(names)
[1] "Alice" "Bob" "Charlie"
# Logical vector
flags <- c(TRUE, FALSE, TRUE, TRUE)
print(flags)
[1] TRUE FALSE TRUE TRUE
🔹 Accessing Elements in a Vector
In R, you can access elements of a vector using square brackets [ ]
with the position (index) of the element.
numbers <- c(10, 20, 30, 40, 50)
# Accessing the 3rd element
numbers[3] # Output: 30
[1] 30
# Accessing the 1st and 4th elements
numbers[c(1, 4)] # Output: 10 40
[1] 10 40
# Accessing all elements except the 2nd
numbers[-2] # Output: 10 30 40 50
[1] 10 30 40 50
🔹 Vector Operations (Element-wise)
R performs element-wise operations on vectors, meaning that
operations like addition, subtraction, multiplication, and division are
applied to each corresponding element of the vectors.
a <- c(1, 2, 3)
b <- c(4, 5, 6)
# Addition
print(a + b) # Output: 5 7 9
[1] 5 7 9
# Multiplication
print(a * b) # Output: 4 10 18
[1] 4 10 18
# Logical Comparison
print(a > 1) # Output: FALSE TRUE TRUE
[1] FALSE TRUE TRUE
🔹 Useful Vector Functions
R provides several built-in functions to perform operations on
vectors.
v <- c(2, 4, 6, 8, 10)
length(v) # Returns number of elements
[1] 5
sum(v) # Returns sum: 30
[1] 30
mean(v) # Average: 6
[1] 6
max(v) # Max value: 10
[1] 10
min(v) # Min value: 2
[1] 2
sort(v) # Sorted vector
[1] 2 4 6 8 10
🔹 Vector Recycling
When vectors of unequal lengths are used in an operation, R recycles
the shorter vector to match the length of the longer one.
Note: R will throw a warning if the length of the
longer vector is not a multiple of the shorter one.
x <- c(1, 2, 3)
y <- c(10, 20)
# y is recycled: 10, 20, 10
print(x + y) # Output: 11 22 13
Warning in x + y :
longer object length is not a multiple of shorter object length
[1] 11 22 13
🔹 Sequence and Repetition
seq( ) function is used to create sequences:
rep( ) function is used to repeat elements:
# Sequence
seq1 <- 1:5 # Output: 1 2 3 4 5
seq2 <- seq(1, 10, 2) # Output: 1 3 5 7 9
cat("seq1 : ",seq1 ,"\n")
seq1 : 1 2 3 4 5
cat("seq1 : ",seq2 ,"\n")
seq1 : 1 3 5 7 9
# Repetition
rep1 <- rep(1, times=5) # 1 1 1 1 1
rep2 <- rep(c(1,2), times=3) # 1 2 1 2 1 2
cat("rep1 : ",rep1 ,"\n")
rep1 : 1 1 1 1 1
cat("rep2 : ",rep2 ,"\n")
rep2 : 1 2 1 2 1 2
Summary
Create vector |
c(1, 2, 3) |
Access elements |
x[2] , x[c(1,3)] |
Length |
length(x) |
Arithmetic |
x + y , x * y |
Sequence |
1:10 , seq(1, 5, 0.5) |
Repetition |
rep(1, times=5) |
Filtering |
x[x > 10] |
LS0tDQp0aXRsZTogIkludHJvZHVjdGlvbiB0byBWZWN0b3JzIGluIFIiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoqKlZlY3RvcnMgaW4gUiA6KiogQSB2ZWN0b3IgaW4gUiBhcmUgKipvbmUtZGltZW5zaW9uYWwgYXJyYXlzKiogdGhhdCBob2xkcyBlbGVtZW50cyBvZiB0aGUgc2FtZSBkYXRhIHR5cGUuIEl0IGNhbiBjb250YWluIG51bWVyaWMsIGNoYXJhY3Rlciwgb3IgbG9naWNhbCB2YWx1ZXMuIFZlY3RvcnMgYXJlIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGluIFIsIGFuZCBtYW55IFIgb3BlcmF0aW9ucyBhcmUgb3B0aW1pemVkIHRvIHdvcmsgd2l0aCB2ZWN0b3JzLg0KDQojIyBBZHZhbnRhZ2VzIG9mIFZlY3RvcnMgaW4gUjoNCg0KKipTaW1wbGUgYW5kIEVmZmljaWVudDoqKiANCg0KVmVjdG9ycyBhcmUgZWFzeSB0byBjcmVhdGUgYW5kIG1hbmlwdWxhdGUgdXNpbmcgYnVpbHQtaW4gUiBmdW5jdGlvbnMuDQoNCkVsZW1lbnQtd2lzZSBvcGVyYXRpb25zIG1ha2UgbWF0aGVtYXRpY2FsIGNvbXB1dGF0aW9ucyB2ZXJ5IGNvbmNpc2UgYW5kIGZhc3QuDQoNCioqTWVtb3J5IEVmZmljaWVudDoqKg0KDQpTaW5jZSBhbGwgZWxlbWVudHMgYXJlIG9mIHRoZSBzYW1lIHR5cGUsIHZlY3RvcnMgdXNlIG1lbW9yeSBlZmZpY2llbnRseSBjb21wYXJlZCB0byBvdGhlciBkYXRhIHN0cnVjdHVyZXMgbGlrZSBsaXN0cy4NCg0KKipTdXBwb3J0cyBWZWN0b3JpemVkIE9wZXJhdGlvbnM6KioNCg0KT3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uIGVudGlyZSB2ZWN0b3JzIHdpdGhvdXQgd3JpdGluZyBsb29wcywgbGVhZGluZyB0byBjbGVhbiBhbmQgZWZmaWNpZW50IGNvZGUuDQoNCioqRm91bmRhdGlvbiBmb3IgQWR2YW5jZWQgU3RydWN0dXJlczoqKg0KDQpWZWN0b3JzIGFyZSBidWlsZGluZyBibG9ja3MgZm9yIG1hdHJpY2VzLCBkYXRhIGZyYW1lcywgYW5kIGFycmF5cy4NCg0KKipSaWNoIFNldCBvZiBGdW5jdGlvbnM6KioNCg0KUiBwcm92aWRlcyBtYW55IHZlY3Rvci1zcGVjaWZpYyBmdW5jdGlvbnMgKGxlbmd0aCgpLCBzdW0oKSwgbWVhbigpLCBzb3J0KCksIGV0Yy4pIGZvciBkYXRhIG1hbmlwdWxhdGlvbi4NCg0KIyMgRGlzYWR2YW50YWdlcyBvZiBWZWN0b3JzIGluIFI6DQoNCioqU2FtZSBEYXRhIFR5cGUgT25seToqKg0KDQpBbGwgZWxlbWVudHMgaW4gYSB2ZWN0b3IgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLiBNaXhpbmcgZGF0YSB0eXBlcyBhdXRvbWF0aWNhbGx5IGNvZXJjZXMgdGhlbSB0byBhIGNvbW1vbiB0eXBlICh3aGljaCBtaWdodCBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cykuDQoNCmBgYHtyfQ0KIyMgRXhhbXBsZToNCg0KdiA8LSBjKDEsICJhcHBsZSIpICAjIG51bWVyaWMgY29lcmNlZCB0byBjaGFyYWN0ZXIg4oaSICIxIg0Kdg0KYGBgDQoNCkNhbm5vdCBob2xkIGhldGVyb2dlbmVvdXMgZGF0YSBsaWtlIGxpc3RzIG9yIHRhYmxlcyB3aGVyZSBlYWNoIGVsZW1lbnQgaGFzIGEgZGlmZmVyZW50IHR5cGUgb3Igc3RydWN0dXJlLg0KDQoqKk5vIEtleS9WYWx1ZSBQYWlyaW5nOioqDQoNClZlY3RvcnMgZG9u4oCZdCBzdXBwb3J0IG5hbWVkIGFjY2VzcyBsaWtlIGRpY3Rpb25hcmllcyBvciBoYXNoIG1hcHMgaW4gb3RoZXIgbGFuZ3VhZ2VzIChleGNlcHQgd2l0aCBuYW1lZCB2ZWN0b3JzLCB3aGljaCBoYXZlIGxpbWl0YXRpb25zKS4NCg0KKipOb3QgSGllcmFyY2hpY2FsOioqDQoNClZlY3RvcnMgYXJlIGZsYXQgc3RydWN0dXJlcy4gTmVzdGVkIG9yIG11bHRpLWxldmVsIGRhdGEgaXMgYmV0dGVyIGhhbmRsZWQgdXNpbmcgbGlzdHMgb3IgZGF0YSBmcmFtZXMuDQoNCiMjIFN1bW1hcnkNClZlY3RvcnMgaW4gUiBhcmUgYmVzdCB1c2VkIHdoZW4gd2UgbmVlZCB0byBzdG9yZSBhIHNpbXBsZSBjb2xsZWN0aW9uIG9mIGhvbW9nZW5lb3VzIGRhdGHigJRzdWNoIGFzIGFsbCBudW1lcmljIHZhbHVlcywgYWxsIGNoYXJhY3RlciBzdHJpbmdzLCBvciBhbGwgbG9naWNhbCB2YWx1ZXMuIFRoZXkgYXJlIGlkZWFsIGZvciBwZXJmb3JtaW5nIGFyaXRobWV0aWMgb3IgbG9naWNhbCBvcGVyYXRpb25zIG9uIG11bHRpcGxlIHZhbHVlcyBhdCBvbmNlIGFuZCBhcmUgY29tbW9ubHkgdXNlZCBpbiBzdGF0aXN0aWNhbCBmdW5jdGlvbnMgdGhhdCByZXF1aXJlIG51bWVyaWMgaW5wdXRzLiBWZWN0b3JzIGFsc28gb2ZmZXIgZ29vZCBwZXJmb3JtYW5jZSBpbiBzaW11bGF0aW9ucyBhbmQgbnVtZXJpY2FsIGNvbXB1dGF0aW9ucywgbWFraW5nIHRoZW0gYSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgaW4gUiBmb3IgbWFueSBtYXRoZW1hdGljYWwgYW5kIHN0YXRpc3RpY2FsIHRhc2tzLg0KDQpIb3dldmVyLCB2ZWN0b3JzIHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gd29ya2luZyB3aXRoIGhldGVyb2dlbmVvdXMgZGF0YSB0eXBlcywgc3VjaCBhcyBhIG1peCBvZiB0ZXh0LCBudW1iZXJzLCBhbmQgYm9vbGVhbnMuIElmIHlvdXIgZGF0YSBuZWVkcyB0byBiZSBvcmdhbml6ZWQgaW50byByb3dzIGFuZCBjb2x1bW5zLCBhIGRhdGEgZnJhbWUgaXMgYSBiZXR0ZXIgY2hvaWNlLiBGb3IgcmVwcmVzZW50aW5nIGtleS12YWx1ZSBwYWlycywgbmVzdGVkIHN0cnVjdHVyZXMsIG9yIGhpZXJhcmNoaWNhbCBkYXRhLCBsaXN0cyBhcmUgbW9yZSBhcHByb3ByaWF0ZS4gQWRkaXRpb25hbGx5LCBmb3IgbGFyZ2Utc2NhbGUgdGFidWxhciBkYXRhIHRoYXQgcmVxdWlyZXMgZWZmaWNpZW50IGluZGV4aW5nIG9yIGNvbHVtbi13aXNlIG9wZXJhdGlvbnMsIGNvbnNpZGVyIHVzaW5nIGRhdGEgZnJhbWVzIG9yIHRpYmJsZXMgKGZyb20gdGhlIGRwbHlyIHBhY2thZ2UpIGluc3RlYWQuDQoNCi0tLQ0KDQojIyMgIFR5cGVzIG9mIFZlY3RvcnMNCg0KfCBUeXBlICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgIHwgRXhhbXBsZSAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCBOdW1lcmljICAgfCBOdW1iZXJzIChkZWZhdWx0IHR5cGUpIHwgYGMoMSwgMi41LCAzLjE0KWAgICAgICAgICAgICAgICAgfA0KfCBJbnRlZ2VyICAgfCBXaG9sZSBudW1iZXJzICAgICAgICAgIHwgYGMoMUwsIDJMLCAzTClgICAgICAgICAgICAgICAgICAgfA0KfCBDaGFyYWN0ZXIgfCBUZXh0IHN0cmluZ3MgICAgICAgICAgIHwgYGMoImFwcGxlIiwgImJhbmFuYSIsICJjaGVycnkiKWAgfA0KfCBMb2dpY2FsICAgfCBUUlVFIC8gRkFMU0UgdmFsdWVzICAgIHwgYGMoVFJVRSwgRkFMU0UsIFRSVUUpYCAgICAgICAgICAgfA0KfCBDb21wbGV4ICAgfCBDb21wbGV4IG51bWJlcnMgICAgICAgIHwgYGMoMSsyaSwgMys0aSlgICAgICAgICAgICAgICAgICAgfA0KDQotLS0NCg0KIyMjICBDcmVhdGluZyBWZWN0b3JzDQoNCldlIGNhbiBjcmVhdGUgYSB2ZWN0b3IgdXNpbmcgdGhlIGBjKClgIChjb21iaW5lKSBmdW5jdGlvbi4NCg0KYGBge3J9DQojIE51bWVyaWMgdmVjdG9yDQpudW1iZXJzIDwtIGMoMTAsIDIwLCAzMCkNCnByaW50KG51bWJlcnMpDQoNCiMgQ2hhcmFjdGVyIHZlY3Rvcg0KbmFtZXMgPC0gYygiQWxpY2UiLCAiQm9iIiwgIkNoYXJsaWUiKQ0KcHJpbnQobmFtZXMpDQoNCiMgTG9naWNhbCB2ZWN0b3INCmZsYWdzIDwtIGMoVFJVRSwgRkFMU0UsIFRSVUUsIFRSVUUpDQpwcmludChmbGFncykNCmBgYA0KDQotLS0NCg0KDQoNCiMjIyDwn5S5IEFjY2Vzc2luZyBFbGVtZW50cyBpbiBhIFZlY3Rvcg0KSW4gUiwgeW91IGNhbiBhY2Nlc3MgZWxlbWVudHMgb2YgYSB2ZWN0b3IgdXNpbmcgc3F1YXJlIGJyYWNrZXRzIFsgXSB3aXRoIHRoZSBwb3NpdGlvbiAoaW5kZXgpIG9mIHRoZSBlbGVtZW50Lg0KDQpgYGB7cn0NCm51bWJlcnMgPC0gYygxMCwgMjAsIDMwLCA0MCwgNTApDQoNCiMgQWNjZXNzaW5nIHRoZSAzcmQgZWxlbWVudA0KbnVtYmVyc1szXSAgICMgT3V0cHV0OiAzMA0KDQojIEFjY2Vzc2luZyB0aGUgMXN0IGFuZCA0dGggZWxlbWVudHMNCm51bWJlcnNbYygxLCA0KV0gICAjIE91dHB1dDogMTAgNDANCg0KIyBBY2Nlc3NpbmcgYWxsIGVsZW1lbnRzIGV4Y2VwdCB0aGUgMm5kDQpudW1iZXJzWy0yXSAgICMgT3V0cHV0OiAxMCAzMCA0MCA1MA0KDQpgYGANCg0KDQotLS0NCg0KIyMjIPCflLkgVmVjdG9yIE9wZXJhdGlvbnMgKEVsZW1lbnQtd2lzZSkNClIgcGVyZm9ybXMgZWxlbWVudC13aXNlIG9wZXJhdGlvbnMgb24gdmVjdG9ycywgbWVhbmluZyB0aGF0IG9wZXJhdGlvbnMgbGlrZSBhZGRpdGlvbiwgc3VidHJhY3Rpb24sIG11bHRpcGxpY2F0aW9uLCBhbmQgZGl2aXNpb24gYXJlIGFwcGxpZWQgdG8gZWFjaCBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgdGhlIHZlY3RvcnMuDQoNCmBgYHtyfQ0KYSA8LSBjKDEsIDIsIDMpDQpiIDwtIGMoNCwgNSwgNikNCg0KIyBBZGRpdGlvbg0KcHJpbnQoYSArIGIpICAjIE91dHB1dDogNSA3IDkNCg0KIyBNdWx0aXBsaWNhdGlvbg0KcHJpbnQoYSAqIGIpICAjIE91dHB1dDogNCAxMCAxOA0KDQojIExvZ2ljYWwgQ29tcGFyaXNvbg0KcHJpbnQoYSA+IDEpICAjIE91dHB1dDogRkFMU0UgVFJVRSBUUlVFDQpgYGANCg0KDQotLS0NCg0KIyMjIPCflLkgVXNlZnVsIFZlY3RvciBGdW5jdGlvbnMNClIgcHJvdmlkZXMgc2V2ZXJhbCBidWlsdC1pbiBmdW5jdGlvbnMgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIHZlY3RvcnMuDQoNCmBgYHtyfQ0KdiA8LSBjKDIsIDQsIDYsIDgsIDEwKQ0KDQpsZW5ndGgodikgICAgICMgUmV0dXJucyBudW1iZXIgb2YgZWxlbWVudHMNCnN1bSh2KSAgICAgICAgIyBSZXR1cm5zIHN1bTogMzANCm1lYW4odikgICAgICAgIyBBdmVyYWdlOiA2DQptYXgodikgICAgICAgICMgTWF4IHZhbHVlOiAxMA0KbWluKHYpICAgICAgICAjIE1pbiB2YWx1ZTogMg0Kc29ydCh2KSAgICAgICAjIFNvcnRlZCB2ZWN0b3INCmBgYA0KDQoNCi0tLQ0KDQojIyMg8J+UuSBWZWN0b3IgUmVjeWNsaW5nDQoNCldoZW4gdmVjdG9ycyBvZiB1bmVxdWFsIGxlbmd0aHMgYXJlIHVzZWQgaW4gYW4gb3BlcmF0aW9uLCBSIHJlY3ljbGVzIHRoZSBzaG9ydGVyIHZlY3RvciB0byBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXIgb25lLg0KDQoqKk5vdGU6KiogUiB3aWxsIHRocm93IGEgd2FybmluZyBpZiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXIgdmVjdG9yIGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBzaG9ydGVyIG9uZS4NCg0KYGBge3J9DQp4IDwtIGMoMSwgMiwgMykNCnkgPC0gYygxMCwgMjApDQoNCiMgeSBpcyByZWN5Y2xlZDogMTAsIDIwLCAxMA0KcHJpbnQoeCArIHkpICAjIE91dHB1dDogMTEgMjIgMTMNCmBgYA0KDQoNCi0tLQ0KDQojIyMg8J+UuSBTZXF1ZW5jZSBhbmQgUmVwZXRpdGlvbg0Kc2VxKCApIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIHNlcXVlbmNlczoNCg0KcmVwKCApIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVwZWF0IGVsZW1lbnRzOg0KDQpgYGB7cn0NCiMgU2VxdWVuY2UNCnNlcTEgPC0gMTo1ICAgICAgICAgICAgIyBPdXRwdXQ6IDEgMiAzIDQgNQ0Kc2VxMiA8LSBzZXEoMSwgMTAsIDIpICAjIE91dHB1dDogMSAzIDUgNyA5DQpjYXQoInNlcTEgOiAiLHNlcTEgLCJcbiIpDQpjYXQoInNlcTEgOiAiLHNlcTIgLCJcbiIpDQoNCiMgUmVwZXRpdGlvbg0KcmVwMSA8LSByZXAoMSwgdGltZXM9NSkgICAgICAgICMgMSAxIDEgMSAxDQpyZXAyIDwtIHJlcChjKDEsMiksIHRpbWVzPTMpICAgIyAxIDIgMSAyIDEgMg0KY2F0KCJyZXAxIDogIixyZXAxICwiXG4iKQ0KY2F0KCJyZXAyIDogIixyZXAyICwiXG4iKQ0KYGBgDQoNCg0KLS0tDQoNCiMjIyAgU3VtbWFyeQ0KDQp8IEZlYXR1cmUgICAgICAgICB8IEV4YW1wbGUgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IENyZWF0ZSB2ZWN0b3IgICB8IGBjKDEsIDIsIDMpYCAgICAgICAgICAgICB8DQp8IEFjY2VzcyBlbGVtZW50cyB8IGB4WzJdYCwgYHhbYygxLDMpXWAgICAgICB8DQp8IExlbmd0aCAgICAgICAgICB8IGBsZW5ndGgoeClgICAgICAgICAgICAgICB8DQp8IEFyaXRobWV0aWMgICAgICB8IGB4ICsgeWAsIGB4ICogeWAgICAgICAgICB8DQp8IFNlcXVlbmNlICAgICAgICB8IGAxOjEwYCwgYHNlcSgxLCA1LCAwLjUpYCB8DQp8IFJlcGV0aXRpb24gICAgICB8IGByZXAoMSwgdGltZXM9NSlgICAgICAgICB8DQp8IEZpbHRlcmluZyAgICAgICB8IGB4W3ggPiAxMF1gICAgICAgICAgICAgICB8DQoNCi0tLQ0KDQoNCg==