Data in R

To run your code, click run. It will let you know if your code is correct or not, and will offer hints on what to fix if needed. If you are stuck, you can see the solution by clicking Solution.

Exercise 1: Arithmetic

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6IiMgbm8gcGVjIiwic2FtcGxlIjoiIyBQaWNrIGEgY29tcGFueSBhbmQgYXNzaWduIGl0J3MgbmFtZSB0byBjb21wYW55X25hbWVcbmNvbXBhbnlfbmFtZSA8LSBcblxuIyBBc3NpZ24gYSBib29sZWFuIHZhbHVlIHRvIGlzX3RlY2hfZmlybVxuaXNfdGVjaF9maXJtIDwtIFxuXG4jIEFzc2lnbiBhIG51bWVyaWMgdmFsdWUgdG8gcmV2ZW51ZVxucmV2ZW51ZSA8LSBcblxuIyBBc3NpZ24gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlybSB0byBjb21wYW55X2Rlc2NcbmNvbXBhbnlfZGVzYyA8LSBcIlwiXG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgQXNzaWduIGEgY2hhcmFjdGVyIHZhbHVlIHRvIGNvbXBhbnlfbmFtZVxuY29tcGFueV9uYW1lIDwtIFwiR29vZ2xlXCJcblxuIyBBc3NpZ24gYSBib29sZWFuIHZhbHVlIHRvIGlzX3RlY2hfZmlybVxuaXNfdGVjaF9maXJtIDwtIFRSVUVcblxuIyBBc3NpZ24gYSBudW1lcmljIHZhbHVlIHRvIHJldmVudWVcbnJldmVudWUgPC0gNDAwMDBcblxuIyBBc3NpZ24gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlybSB0byBjb21wYW55X2Rlc2NcbmNvbXBhbnlfZGVzYyA8LSBcIlN0YXJ0ZWQgd2l0aCBzZWFyY2gsIGJ1dCBpcyBub3cgZXZlcnl3aGVyZVwiXG5cbiNFTkQiLCJzY3QiOiIjIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuIyB0ZXN0X3N0dWRlbnRfdHlwZWQoJ3ggPC0gMicsIG5vdF90eXBlZF9tc2c9JycpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuIyB0ZXN0X2Z1bmN0aW9uKCdjJyxpbmNvcnJlY3RfbXNnPScnKSAgXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuIyB0ZXN0X29iamVjdChcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIix1bmRlZmluZWRfbXNnID0gXCJcIikgIFxuXG4jIFJlcXVpcmVzIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIGB4YCBpbiB0aGUgc29sdXRpb25cbiMgdGVzdF9hbl9vYmplY3QoXCJ4XCIsdW5kZWZpbmVkX21zZz1cIlwiKVxuXG4jIENoZWNrcyBpZiBvdXRwdXQgb2Ygc3R1ZGVudCdzIGNvZGUgY29udGFpbnMgZ2l2ZW4gZXZhbHVhdGVkIGV4cHJlc3Npb25cbiMgdGVzdF9vdXRwdXRfY29udGFpbnMoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9uYW1lKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfbmFtZWA/XCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwidHlwZW9mKGlzX3RlY2hfZmlybSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgVFJVRSBvciBGQUxTRSBpbiBgaXNfdGVjaF9maXJtYD9cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YocmV2ZW51ZSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgbnVtZXJpYyBkYXRhIGluIGByZXZlbnVlYD9cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9kZXNjKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfZGVzY2A/XCIpXG5cbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIVwiKVxuXG4jIE90aGVyIGZ1bmN0aW9ucyB0byBub3RlOlxuIyAgICAgLSB0ZXN0X29yKGEsYikgLS0gY2hlY2tzIGlmIGVpdGhlciB0ZXN0IGEgb3IgdGVzdCBiIHBhc3NcbiMgICAgIC0gdGVzdF9nZ3Bsb3QoKSAtLSBjYW4gY2hlY2sgaWYgcGxvdHMgYXJlIGNvcnJlY3RcbiMgICAgIC0gdGVzdF9mdW5jdGlvbigpIC0tIGNhbiBhbHNvIGNoZWNrIGluY2x1ZGVkIHBhcmFtZXRlcnNcbiMgICAgIC0gdGVzdF9sb29wKCkgLS0gY2hlY2tpbmcgZm9yIGFuZCB3aGlsZSBsb29wc1xuIyAgICAgLSB0ZXN0X2xpYnJhcnlfZnVuY3Rpb24oJ3BhY2thZ2UnLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2lmX2Vsc2UoKSAtLSBjaGVja2luZyBpZiBzdGF0ZW1lbnRzXG4jICAgICAtIHRlc3RfZXhwcmVzc2lvbl9lcnJvcigpIC0tIGNhbiBjaGVjayBpZiBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGRlZmluZWRcbiMgICAgIC0gdGVzdF9vcGVyYXRvcignb3BlcmF0b3InLCksIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfZnVuY3Rpb25fZGVmaW5pdGlvbigpIC0tIHJpZ29yb3VzbHkgY2hlY2sgZGVmaW5lZCBmdW5jdGlvblxuIyAgICAgLSB0ZXN0X2RhdGFfZnJhbWUoKSAtLSBjaGVjayBpZiBkYXRhZnJhbWUgW2NvbHVtbnNdIGFyZSBlcXVpdmFsZW50XG4jICAgICAtIHRlc3RfZnVuY3Rpb25fcmVzdWx0LCB0ZXN0X2V4cHJlc3Npb25fcmVzdWx0In0=

Exercise 2: Data types

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6IiMgbm8gcGVjIiwic2FtcGxlIjoiIyBQaWNrIGEgY29tcGFueSBhbmQgYXNzaWduIGl0J3MgbmFtZSB0byBjb21wYW55X25hbWVcbmNvbXBhbnlfbmFtZSA8LSBcblxuIyBBc3NpZ24gYSBib29sZWFuIHZhbHVlIHRvIGlzX3RlY2hfZmlybVxuaXNfdGVjaF9maXJtIDwtIFxuXG4jIEFzc2lnbiBhIG51bWVyaWMgdmFsdWUgdG8gcmV2ZW51ZVxucmV2ZW51ZSA8LSBcblxuIyBBc3NpZ24gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlybSB0byBjb21wYW55X2Rlc2NcbmNvbXBhbnlfZGVzYyA8LSBcIlwiXG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgQXNzaWduIGEgY2hhcmFjdGVyIHZhbHVlIHRvIGNvbXBhbnlfbmFtZVxuY29tcGFueV9uYW1lIDwtIFwiR29vZ2xlXCJcblxuIyBBc3NpZ24gYSBib29sZWFuIHZhbHVlIHRvIGlzX3RlY2hfZmlybVxuaXNfdGVjaF9maXJtIDwtIFRSVUVcblxuIyBBc3NpZ24gYSBudW1lcmljIHZhbHVlIHRvIHJldmVudWVcbnJldmVudWUgPC0gNDAwMDBcblxuIyBBc3NpZ24gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlybSB0byBjb21wYW55X2Rlc2NcbmNvbXBhbnlfZGVzYyA8LSBcIlN0YXJ0ZWQgd2l0aCBzZWFyY2gsIGJ1dCBpcyBub3cgZXZlcnl3aGVyZVwiXG5cbiNFTkQiLCJzY3QiOiIjIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuIyB0ZXN0X3N0dWRlbnRfdHlwZWQoJ3ggPC0gMicsIG5vdF90eXBlZF9tc2c9JycpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuIyB0ZXN0X2Z1bmN0aW9uKCdjJyxpbmNvcnJlY3RfbXNnPScnKSAgXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuIyB0ZXN0X29iamVjdChcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIix1bmRlZmluZWRfbXNnID0gXCJcIikgIFxuXG4jIFJlcXVpcmVzIGFuIG9uamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIGB4YCBpbiB0aGUgc29sdXRpb25cbiMgdGVzdF9hbl9vYmplY3QoXCJ4XCIsdW5kZWZpbmVkX21zZz1cIlwiKVxuXG4jIENoZWNrcyBpZiBvdXRwdXQgb2Ygc3R1ZGVudCdzIGNvZGUgY29udGFpbnMgZ2l2ZW4gZXZhbHVhdGVkIGV4cHJlc3Npb25cbiMgdGVzdF9vdXRwdXRfY29udGFpbnMoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9uYW1lKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfbmFtZWA/XCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwidHlwZW9mKGlzX3RlY2hfZmlybSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgVFJVRSBvciBGQUxTRSBpbiBgaXNfdGVjaF9maXJtYD9cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YocmV2ZW51ZSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgbnVtZXJpYyBkYXRhIGluIGByZXZlbnVlYD9cIilcbnRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9kZXNjKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfZGVzY2A/XCIpXG5cbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIVwiKVxuXG4jIE90aGVyIGZ1bmN0aW9ucyB0byBub3RlOlxuIyAgICAgLSB0ZXN0X29yKGEsYikgLS0gY2hlY2tzIGlmIGVpdGhlciB0ZXN0IGEgb3IgdGVzdCBiIHBhc3NcbiMgICAgIC0gdGVzdF9nZ3Bsb3QoKSAtLSBjYW4gY2hlY2sgaWYgcGxvdHMgYXJlIGNvcnJlY3RcbiMgICAgIC0gdGVzdF9mdW5jdGlvbigpIC0tIGNhbiBhbHNvIGNoZWNrIGluY2x1ZGVkIHBhcmFtZXRlcnNcbiMgICAgIC0gdGVzdF9sb29wKCkgLS0gY2hlY2tpbmcgZm9yIGFuZCB3aGlsZSBsb29wc1xuIyAgICAgLSB0ZXN0X2xpYnJhcnlfZnVuY3Rpb24oJ3BhY2thZ2UnLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2lmX2Vsc2UoKSAtLSBjaGVja2luZyBpZiBzdGF0ZW1lbnRzXG4jICAgICAtIHRlc3RfZXhwcmVzc2lvbl9lcnJvcigpIC0tIGNhbiBjaGVjayBpZiBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGRlZmluZWRcbiMgICAgIC0gdGVzdF9vcGVyYXRvcignb3BlcmF0b3InLCksIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfZnVuY3Rpb25fZGVmaW5pdGlvbigpIC0tIHJpZ29yb3VzbHkgY2hlY2sgZGVmaW5lZCBmdW5jdGlvblxuIyAgICAgLSB0ZXN0X2RhdGFfZnJhbWUoKSAtLSBjaGVjayBpZiBkYXRhZnJhbWUgW2NvbHVtbnNdIGFyZSBlcXVpdmFsZW50XG4jICAgICAtIHRlc3RfZnVuY3Rpb25fcmVzdWx0LCB0ZXN0X2V4cHJlc3Npb25fcmVzdWx0In0=

Exercise 3: Vectors

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImVhcm5pbmdzX0IgPC0gYyg0LjI4NiwgMjQuNDQxLCAtNi43OTgpXG5hc3NldHMgPC0gYyg5MTY3NzYsIDI1MzM2MDAsIDE4NDI0NjUpIiwic2FtcGxlIjoiIyBFYWNoIHZlY3RvciBiZWxvdyBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dDogR29sZG1hbiBTYWNocywgSlBNb3JnYW4sIGFuZCBDaXRpZ3JvdXBcbmVhcm5pbmdzX0IgICMgSW4gYmlsbGlvbnMgb2YgVVNEXG5hc3NldHMgICMgSW4gbWlsbGlvbnMgb2YgVVNEXG5cbiMgY3JlYXRlIGEgbmV3IHZlY3RvciwgZWFybmluZ3MsIHRoYXQgY29udGFpbnMgdGhlc2UgZmlybXMgZWFybmluZ3MgaW4gTWlsbGlvbnNcbmVhcm5pbmdzIDwtIFxuXG4jIENyZWF0ZSBhIHZlY3RvciBvZiBuYW1lcyBmb3IgdGhlIHRocmVlIGJhbmtzIChhbnkgdW5kZXJzdGFuZGFibGUgbmFtZSBpcyBmaW5lKVxuYmFua19uYW1lcyA8LSBcblxuIyBDYWxjdWxhdGUgUk9BIGFuZCBzdG9yZSBpbnRvIHRoZSByb2EgdmVjdG9yXG5yb2EgPC0gXG5cbiMgQXBwbHkgbmFtZXMgdG8gcm9hXG5cblxuIyBPdXRwdXQgdGhlIFJPQSB2ZWN0b3IgdG8gc2VlIHRoZSBiYW5rcycgMjAxNyBST0FcblxuXG4jRU5EIiwic29sdXRpb24iOiIjIEVhY2ggdmVjdG9yIGJlbG93IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0OiBHb2xkbWFuIFNhY2hzLCBKUE1vcmdhbiwgYW5kIENpdGlncm91cFxuZWFybmluZ3NfQiAgIyBJbiBiaWxsaW9ucyBvZiBVU0RcbmFzc2V0cyAgIyBJbiBtaWxsaW9ucyBvZiBVU0RcblxuIyBjcmVhdGUgYSBuZXcgdmVjdG9yLCBlYXJuaW5ncywgdGhhdCBjb250YWlucyB0aGVzZSBmaXJtcyBlYXJuaW5ncyBpbiBNaWxsaW9uc1xuZWFybmluZ3MgPC0gZWFybmluZ3NfQiAqIDEwMDBcblxuIyBDcmVhdGUgYSB2ZWN0b3Igb2YgbmFtZXMgZm9yIHRoZSB0aHJlZSBiYW5rcyAoYW55IHVuZGVyc3RhbmRhYmxlIG5hbWUgaXMgZmluZSlcbmJhbmtfbmFtZXMgPC0gYyhcIkdvbGRtYW5cIiwgXCJKUE1vcmdhblwiLCBcIkNpdGlncm91cFwiKVxuXG4jIENhbGN1bGF0ZSBST0EgYW5kIHN0b3JlIGludG8gdGhlIHJvYSB2ZWN0b3JcbnJvYSA8LSBlYXJuaW5ncyAvIGFzc2V0c1xuXG4jIEFwcGx5IG5hbWVzIHRvIHJvYVxubmFtZXMocm9hKSA8LSBiYW5rX25hbWVzXG5cbiMgT3V0cHV0IHRoZSBST0EgdmVjdG9yIHRvIHNlZSB0aGUgYmFua3MnIDIwMTcgUk9BXG5yb2FcblxuI0VORCIsInNjdCI6IiMgVGVtcGxhdGUgYmFzZWQgb24gaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3Rlc3R3aGF0L3ZlcnNpb25zLzQuMS4xXG4jIENoZWNrIGlmIHNvbWV0aGluZyBpcyBleHBsaWNpdGx5IHR5cGVkXG4jIHRlc3Rfc3R1ZGVudF90eXBlZCgncm9hJywgbm90X3R5cGVkX21zZz0nJylcblxuIyBDaGVjayBpZiBmdW5jdGlvbiB3YXMgdXNlZCBpbiBpbnB1dCBjb2RlXG4jIHRlc3RfZnVuY3Rpb24oJ2MnLGluY29ycmVjdF9tc2c9JycpXG50ZXN0X2Z1bmN0aW9uKFwiY1wiLGluY29ycmVjdF9tc2c9XCJZb3UgbmVlZCB0byB1c2UgdGhlIGBjYCBmdW5jdGlvbiB0byBzdG9yZSB0aGUgYmFua3NcXCcgbmFtZXNcIilcbnRlc3RfZnVuY3Rpb24oJ25hbWVzJyxpbmNvcnJlY3RfbXNnPSdZb3UgbmVlZCB0byB1c2UgdGhlIGBuYW1lcygpYCBmdW5jdGlvbiB0byBuYW1lIHRoZSBlbGVtZW50cyBvZiBgcm9hYCcpXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxudGVzdF9vYmplY3QoXCJlYXJuaW5nc1wiLGluY29ycmVjdF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBjb252ZXJ0IGBlYXJuaW5nc19CYCBmcm9tIGJpbGxpb25zIHRvIG1pbGxpb25zIG9mIFVTRFwiLHVuZGVmaW5lZF9tc2cgPSBcIkRpZCB5b3UgZGVmaW5lIGBlYXJuaW5nc2A/XCIpXG50ZXN0X29iamVjdChcInJvYVwiLGluY29ycmVjdF9tc2cgPSBcIkRpZCB5b3UgY29ycmVjdGx5IGNhbGN1bGF0ZSByb2E/XCIsdW5kZWZpbmVkX21zZyA9IFwiRGlkIHlvdSBkZWZpbmUgYHJvYWA/XCIpXG5cbiMgUmVxdWlyZXMgYW4gb25qZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgYHhgIGluIHRoZSBzb2x1dGlvblxuIyB0ZXN0X2FuX29iamVjdChcInhcIix1bmRlZmluZWRfbXNnPVwiXCIpXG5cbiMgQ2hlY2tzIGlmIG91dHB1dCBvZiBzdHVkZW50J3MgY29kZSBjb250YWlucyBnaXZlbiBldmFsdWF0ZWQgZXhwcmVzc2lvblxudGVzdF9vdXRwdXRfY29udGFpbnMoXCJyb2FcIixpbmNvcnJlY3RfbXNnID0gXCJEaWQgeW91IHJlbWVtYmVyIHRvIHByaW50IGByb2FgP1wiKVxuXG4jIENoZWNrIGlmIGEgdmVjdG9yIG9mIHByZWRlZmluZWQgb2JqZWN0cyBhcmUgdW5jaGFuZ2VkXG4jIHRlc3RfcHJlZGVmaW5lZF9vYmplY3RzKGMoJ3gnLCd5JyksaW5jb3JyZWN0X21zZz1cIkRvbid0IG9udmVyd3JpdGUgdGhlIHByZWRlZmluZWQgdmFyaWFibGVzXCIpXG5cbiMgQ2hlY2tzIGZvciBhIHJlZ2V4IHBhdHRlcm4gaW4gdHJoZSBvdXRwdXRcbiMgdGVzdF9vdXRwdXRfcmVnZXgocGF0dGVybixmaXhlZD1GLCB0aW1lcz0xLCBpbmNvcnJlY3RfbXNnPScnKVxuXG4jIENhbiBjaGVjayBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBhY3Jvc3MgYm90aCBzb2x1dGlvbiBhbmQgc3R1ZGVudCBjb2RlXG4jdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==

Exercise 4: Lists

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIGRhdGEuZnJhbWUoeWVhcj1jKDIwMTAsMjAxMSwyMDEyLDIwMTMsMjAxNCwyMDE1LDIwMTYsMjAxNyksXG4gICAgICAgICAgICAgICAgIGFzc2V0cz1jKDkzMDM2OSwxMTI3ODA2LDExOTM1OTMsMTI4Nzc2NSwxMzYzNDI3LDEyNzk3MTUsMTM3NTE3OSwxNDQzOTgyKSxcbiAgICAgICAgICAgICAgICAgZGVwb3NpdHM9YygyMTE3NjA1LDIyNjU3OTIsMjM1OTE0MSwyNDE1Njg5LDI1NzMxMjYsMjM1MTY5OCwyNDkwOTcyLDI1MzM2MDApKVxubW9kZWwgPC0gc3VtbWFyeShsbShhc3NldHMgfiBkZXBvc2l0cywgZGF0YT1kZikpIiwic2FtcGxlIjoiIyBCZWxvdyBpcyBhIGxpbmVhciBtb2RlbCBvZiBKUE1vcmdhbidzIGFzc2V0cyByZWdyZXNzZWQgb24gY3VzdG9tZXIncyB0b3RhbCBkZXBvc2l0c1xubW9kZWxcbnN0cihtb2RlbClcblxuIyBSdW4gdGhlIGFib3ZlIGFuZCBleGFtaW5lIHRoZSBvdXRwdXQuXG4jIEV4dHJhY3QgdGhlIGNvZWZmaWNpZW50IChFc3RpbWF0ZSkgZm9yIGRlcG9zaXRzXG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgQmVsb3cgaXMgYSBsaW5lYXIgbW9kZWwgb2YgSlBNb3JnYW4ncyBhc3NldHMgcmVncmVzc2VkIG9uIGN1c3RvbWVyJ3MgdG90YWwgZGVwb3NpdHNcbm1vZGVsXG5zdHIobW9kZWwpXG5cbiMgUnVuIHRoZSBhYm92ZSBhbmQgZXhhbWluZSB0aGUgb3V0cHV0LlxuIyBFeHRyYWN0IHRoZSBjb2VmZmljaWVudCAoRXN0aW1hdGUpIGZvciBkZXBvc2l0cyBhbmQgb3V0cHV0IGl0IHRvIGNvbnNvbGVcbiMgRG8gdGhpcyB1c2luZyBleHRyYWN0aW9uIHdpdGggbGlzdHNcbm1vZGVsJGNvZWZmaWNpZW50c1tbMiwxXV0iLCJzY3QiOiIjIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuIyB0ZXN0X3N0dWRlbnRfdHlwZWQoJ3ggPC0gMicsIG5vdF90eXBlZF9tc2c9JycpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuIyB0ZXN0X2Z1bmN0aW9uKCdjJyxpbmNvcnJlY3RfbXNnPScnKSAgXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuIyB0ZXN0X29iamVjdChcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIix1bmRlZmluZWRfbXNnID0gXCJcIikgIFxuXG4jIFJlcXVpcmVzIGFuIG9uamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIGB4YCBpbiB0aGUgc29sdXRpb25cbiMgdGVzdF9hbl9vYmplY3QoXCJ4XCIsdW5kZWZpbmVkX21zZz1cIlwiKVxuXG4jIENoZWNrcyBpZiBvdXRwdXQgb2Ygc3R1ZGVudCdzIGNvZGUgY29udGFpbnMgZ2l2ZW4gZXZhbHVhdGVkIGV4cHJlc3Npb25cbnRlc3Rfb3V0cHV0X2NvbnRhaW5zKFwibW9kZWwkY29lZmZpY2llbnRzW1syLDFdXVwiLGluY29ycmVjdF9tc2cgPSBcIllvdSBoYXZlIG5vdCBleHRyYWN0ZWQgYW5kIHByaW50ZWQgdGhlIHJpZ2h0IG51bWJlciFcIilcblxuIyBDaGVjayBpZiBhIHZlY3RvciBvZiBwcmVkZWZpbmVkIG9iamVjdHMgYXJlIHVuY2hhbmdlZFxuIyB0ZXN0X3ByZWRlZmluZWRfb2JqZWN0cyhjKCd4JywneScpLGluY29ycmVjdF9tc2c9XCJEb24ndCBvbnZlcndyaXRlIHRoZSBwcmVkZWZpbmVkIHZhcmlhYmxlc1wiKVxuXG4jIENoZWNrcyBmb3IgYSByZWdleCBwYXR0ZXJuIGluIHRyaGUgb3V0cHV0XG4jIHRlc3Rfb3V0cHV0X3JlZ2V4KHBhdHRlcm4sZml4ZWQ9RiwgdGltZXM9MSwgaW5jb3JyZWN0X21zZz0nJylcblxuIyBDYW4gY2hlY2sgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gYWNyb3NzIGJvdGggc29sdXRpb24gYW5kIHN0dWRlbnQgY29kZVxuIyB0ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwidHlwZW9mKGNvbXBhbnlfbmFtZSlcIiwgaW5jb3JyZWN0X21zZz1cIkRpZCB5b3Ugc3RvcmUgdGV4dHVhbCBkYXRhIGluIGBjb21wYW55X25hbWVgP1wiKVxuXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiQXdlc29tZSFcIilcblxuIyBPdGhlciBmdW5jdGlvbnMgdG8gbm90ZTpcbiMgICAgIC0gdGVzdF9vcihhLGIpIC0tIGNoZWNrcyBpZiBlaXRoZXIgdGVzdCBhIG9yIHRlc3QgYiBwYXNzXG4jICAgICAtIHRlc3RfZ2dwbG90KCkgLS0gY2FuIGNoZWNrIGlmIHBsb3RzIGFyZSBjb3JyZWN0XG4jICAgICAtIHRlc3RfZnVuY3Rpb24oKSAtLSBjYW4gYWxzbyBjaGVjayBpbmNsdWRlZCBwYXJhbWV0ZXJzXG4jICAgICAtIHRlc3RfbG9vcCgpIC0tIGNoZWNraW5nIGZvciBhbmQgd2hpbGUgbG9vcHNcbiMgICAgIC0gdGVzdF9saWJyYXJ5X2Z1bmN0aW9uKCdwYWNrYWdlJywgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9pZl9lbHNlKCkgLS0gY2hlY2tpbmcgaWYgc3RhdGVtZW50c1xuIyAgICAgLSB0ZXN0X2V4cHJlc3Npb25fZXJyb3IoKSAtLSBjYW4gY2hlY2sgaWYgZnVuY3Rpb25zIGFyZSBwcm9wZXJseSBkZWZpbmVkXG4jICAgICAtIHRlc3Rfb3BlcmF0b3IoJ29wZXJhdG9yJywpLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX2RlZmluaXRpb24oKSAtLSByaWdvcm91c2x5IGNoZWNrIGRlZmluZWQgZnVuY3Rpb25cbiMgICAgIC0gdGVzdF9kYXRhX2ZyYW1lKCkgLS0gY2hlY2sgaWYgZGF0YWZyYW1lIFtjb2x1bW5zXSBhcmUgZXF1aXZhbGVudFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uX3Jlc3VsdCwgdGVzdF9leHByZXNzaW9uX3Jlc3VsdCJ9

Exercise 5a: Data frames

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSIsInNhbXBsZSI6IiMgZGYgY29udGFpbnMgOSB2YXJpYWJsZXMgYWNyb3NzIDggeWVhcnMgYW5kIDMgYmFua3NcbmhlYWQoZGYpXG5cbiMgRXh0cmFjdCB0aGUgOHRoIHJvdyBvZiB0aGUgZGF0YWZyYW1lIChDaXRpZ3JvdXAgaW4gMjAxNyksIHVzaW5nIHNxdWFyZSBicmFja2V0c1xuXG5cbiMgQ2FsY3VsYXRlIHRoZSByYXRpbyBvZiBkZXBvc2l0cyB0byBhc3NldHMgZm9yIGVhY2ggZmlybS15ZWFyLlxuIyBkcHRjIGlzIHRoZSBhbW91bnQgb2YgZGVwb3NpdHMgaGVsZCBieSB0aGUgYmFua1xuIyBhdCBpcyB0aGUgYW1vdW50IG9mIGFzc2V0cyB0aGUgYmFuayBoYWRcbiMgU3RvcmUgdGhpcyBpbiBhIG5ldyBjb2x1bW4gb2YgdGhlIGRhdGFmcmFtZSBjYWxsZWQgXCJyYXRpb1wiXG5cblxuIyBXaGF0IGlzIHRoZSBhdmVyYWdlIChtZWFuKSBvZiByYXRpbz8gIFVzZSB0aGUgbWVhbiBmdW50aW9uIHRvIGNhbGN1bGF0ZSB0aGlzXG5tZWFuKClcblxuIyBOb3csIHNvcnQgdGhlIGRhdGFmcmFtZSBieSByYXRpby4gIEZpbmlzaCB0aGUgZ2l2ZW4gY29tbWFuZFxub3JkZXJpbmcgPC0gb3JkZXIoKVxuZGZfc29ydGVkIDwtIGRmW29yZGVyaW5nLF0gICMgVGhpcyBsaW5lIGlzIGZpbmlzaGVkIGFscmVhZHlcblxuXG4jIExhc3RseSwgd2hpY2ggYmFuay15ZWFyIGhhZCB0aGUgbG93ZXN0IHJhdGlvP1xucHJpbnQocGFzdGUoZGZfc29ydGVkJGZ5ZWFyWzFdLCBkZl9zb3J0ZWQkY29ubVsxXSwnOicsZGZfc29ydGVkJHJhdGlvWzFdKSkgICMgVGhpcyBsaW5lIGlzIGZpbmlzaGVkIGFscmVhZHlcblxuXG4jIFRoZSBoaWdoZXN0IHJhdGlvP1xuciA8LSBucm93KGRmX3NvcnRlZClcbnByaW50KHBhc3RlKGRmX3NvcnRlZCRmeWVhcltyXSwgZGZfc29ydGVkJGNvbm1bcl0sJzonLGRmX3NvcnRlZCRyYXRpb1tyXSkpICAjIFRoaXMgbGluZSBpcyBmaW5pc2hlZCBhbHJlYWR5XG5cbiNFTkQiLCJzb2x1dGlvbiI6IiMgZGYgY29udGFpbnMgOSB2YXJpYWJsZXMgYWNyb3NzIDggeWVhcnMgYW5kIDMgYmFua3NcbmhlYWQoZGYpXG5cbiMgRXh0cmFjdCB0aGUgOHRoIHJvdyBvZiB0aGUgZGF0YWZyYW1lIChDaXRpZ3JvdXAgaW4gMjAxNyksIHVzaW5nIHNxdWFyZSBicmFja2V0c1xuZGZbOCxdXG5cbiMgQ2FsY3VsYXRlIHRoZSByYXRpbyBvZiBkZXBvc2l0cyB0byBhc3NldHMgZm9yIGVhY2ggZmlybS15ZWFyLlxuIyBkcHRjIGlzIHRoZSBhbW91bnQgb2YgZGVwb3NpdHMgaGVsZCBieSB0aGUgYmFua1xuIyBhdCBpcyB0aGUgYW1vdW50IG9mIGFzc2V0cyB0aGUgYmFuayBoYWRcbiMgU3RvcmUgdGhpcyBpbiBhIG5ldyBjb2x1bW4gb2YgdGhlIGRhdGFmcmFtZSBjYWxsZWQgXCJyYXRpb1wiXG5kZiRyYXRpbyA9IGRmJGRwdGMgLyBkZiRhdFxuXG4jIFdoYXQgaXMgdGhlIGF2ZXJhZ2UgKG1lYW4pIG9mIHJhdGlvPyAgVXNlIHRoZSBtZWFuIGZ1bnRpb24gdG8gY2FsY3VsYXRlIHRoaXNcbm1lYW4oZGYkcmF0aW8pXG5cbiMgTm93LCBzb3J0IHRoZSBkYXRhZnJhbWUgYnkgcmF0aW8uICBGaW5pc2ggdGhlIGdpdmVuIGNvbW1hbmRcbm9yZGVyaW5nIDwtIG9yZGVyKGRmJHJhdGlvKVxuZGZfc29ydGVkIDwtIGRmW29yZGVyaW5nLF0gICMgVGhpcyBsaW5lIGlzIGZpbmlzaGVkIGFscmVhZHlcblxuXG4jIExhc3RseSwgd2hpY2ggYmFuay15ZWFyIGhhZCB0aGUgbG93ZXN0IHJhdGlvP1xucHJpbnQocGFzdGUoZGZfc29ydGVkJGZ5ZWFyWzFdLCBkZl9zb3J0ZWQkY29ubVsxXSwnOicsZGZfc29ydGVkJHJhdGlvWzFdKSkgICMgVGhpcyBsaW5lIGlzIGZpbmlzaGVkIGFscmVhZHlcblxuIyBUaGUgaGlnaGVzdCByYXRpbz9cbnIgPC0gbnJvdyhkZl9zb3J0ZWQpXG5wcmludChwYXN0ZShkZl9zb3J0ZWQkZnllYXJbcl0sIGRmX3NvcnRlZCRjb25tW3JdLCc6JyxkZl9zb3J0ZWQkcmF0aW9bcl0pKSAgIyBUaGlzIGxpbmUgaXMgZmluaXNoZWQgYWxyZWFkeVxuXG4jRU5EIiwic2N0IjoiIyBUZW1wbGF0ZSBiYXNlZCBvbiBodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvdGVzdHdoYXQvdmVyc2lvbnMvNC4xLjFcbiMgQ2hlY2sgaWYgc29tZXRoaW5nIGlzIGV4cGxpY2l0bHkgdHlwZWRcbiMgdGVzdF9zdHVkZW50X3R5cGVkKCd4IDwtIDInLCBub3RfdHlwZWRfbXNnPScnKVxuXG50ZXN0X3N0dWRlbnRfdHlwZWQoXCJkZls4LF1cIixub3RfdHlwZWRfbXNnID0gXCJNYWtlIHN1cmUgdG8gb3V0cHV0IHRoZSA4dGggcm93IG9mIHRoZSBkYXRhIGZyYW1lLlwiKVxudGVzdF9leHByZXNzaW9uX291dHB1dChcInN1bShkZiRyYXRpbylcIixpbmNvcnJlY3RfbXNnID0gXCJSZW1lbWJlciB0byBjYWxjdWxhdGUgYHJhdGlvYCBhbmQgYWRkIGl0IHRvIHRoZSBkYXRhZnJhbWUuXCIpXG50ZXN0X2Z1bmN0aW9uKCdtZWFuJyxpbmNvcnJlY3RfbXNnPSdEaWQgeW91IHVzZSBgbWVhbigpYCB0byBjYWxjdWxhdGUgdGhlIGF2ZXJhZ2UgcmF0aW8/JylcbnRlc3Rfb3V0cHV0X2NvbnRhaW5zKFwibWVhbihkZiRyYXRpbylcIixpbmNvcnJlY3RfbXNnID0gXCJEaWQgeW91IG91dHB1dCB0aGUgbWVhbiBvZiBgcmF0aW9gP1wiKVxudGVzdF9leHByZXNzaW9uX291dHB1dChcImRmX3NvcnRlZCRyYXRpb1sxXVwiLGluY29ycmVjdF9tc2cgPSBcIk1ha2Ugc3VyZSB0byBzb3J0IGJ5IGByYXRpb2AuXCIpXG50ZXN0X2Vycm9yKClcbnN1Y2Nlc3NfbXNnKFwiQXdlc29tZSFcIilcblxuIyBDaGVjayBpZiBmdW5jdGlvbiB3YXMgdXNlZCBpbiBpbnB1dCBjb2RlXG5cblxuIyBSZXF1aXJlcyBhbiBvYmplY3QgYHhgIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIHNvbHV0aW9uXG5cblxuIyBSZXF1aXJlcyBhbiBvbmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiBgeGAgaW4gdGhlIHNvbHV0aW9uXG4jIHRlc3RfYW5fb2JqZWN0KFwieFwiLHVuZGVmaW5lZF9tc2c9XCJcIilcblxuIyBDaGVja3MgaWYgb3V0cHV0IG9mIHN0dWRlbnQncyBjb2RlIGNvbnRhaW5zIGdpdmVuIGV2YWx1YXRlZCBleHByZXNzaW9uXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbiMgdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxuXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==

Exercise 5: Subsetting our data frame

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSIsInNhbXBsZSI6IiMgZGYgaXMgdGhlIHNhbWUgZGF0YWZyYW1lIGZyb20gRXhlcmNpc2UgIzRcbmhlYWQoZGYpXG5cbiMgTWFrZSBhIG5ldyBkYXRhZnJhbWUsIGRmX2pwbSwgd2hpY2ggb25seSBjb250YWlucyBKUE1vcmdhbiBkYXRhXG5kZl9qcG0gPC0gXG5cbiMgTWFrZSBhIG5ldyBkYXRhZnJhbWUsIGRmX21pZHllYXJzLCB3aGljaCBvbmx5IGNvbnRhaW5zIGRhdGEgZnJvbSAyMDEyIHRocm91Z2ggMjAxNVxuZGZfbWlkeWVhcnMgPC0gXG5cbiMgTWFrZSBhIG5ldyBkYXRhZnJhbWUsIGRmX2xvc3MsIHRoYXQgb25seSBjb250YWlucyBkYXRhIHdoZXJlIHRoZSBiYW5rcyBoYWQgbmVnYXRpdmUgZWFybmluZ3NcbmRmX2xvc3MgPC1cblxuI3ByaW50IG91dCBmaXJtIHllYXJzIHdpdGggbG9zc2VzXG5wcmludChwYXN0ZShkZl9sb3NzJGZ5ZWFyLCBkZl9sb3NzJGNvbm0sIGRmX2xvc3MkbmkpKSAgIyBUaGlzIGxpbmUgaXMgZmluaXNoZWQgYWxyZWFkeVxuXG4jRU5EIiwic29sdXRpb24iOiIjIGRmIGlzIHRoZSBzYW1lIGRhdGFmcmFtZSBmcm9tIEV4ZXJjaXNlICM0XG5oZWFkKGRmKVxuXG4jIE1ha2UgYSBuZXcgZGF0YWZyYW1lLCBkZl9qcG0sIHdoaWNoIG9ubHkgY29udGFpbnMgSlBNb3JnYW4gZGF0YVxuZGZfanBtIDwtIGRmW2RmJHRpYyA9PSAnSlBNJyxdXG5cbiMgTWFrZSBhIG5ldyBkYXRhZnJhbWUsIGRmX21pZHllYXJzLCB3aGljaCBvbmx5IGNvbnRhaW5zIGRhdGEgZnJvbSBmaXNjYWwgeWVhcnMgMjAxMiB0aHJvdWdoIDIwMTVcbiMgTm90ZTogZmlzY2FsIHllYXIgaXMgZGYkZnllYXIgaW4gdGhlIGRhdGEgZnJhbWVcbmRmX21pZHllYXJzIDwtIGRmW2RmJGZ5ZWFyID4gMjAxMSAmIGRmJGZ5ZWFyIDwgMjAxNixdXG5cbiMgTWFrZSBhIG5ldyBkYXRhZnJhbWUsIGRmX2xvc3MsIHRoYXQgb25seSBjb250YWlucyBkYXRhIHdoZXJlIHRoZSBiYW5rcyBoYWQgbmVnYXRpdmUgZWFybmluZ3NcbmRmX2xvc3MgPC0gZGZbZGYkbmkgPCAwLF1cblxuI3ByaW50IG91dCBmaXJtIHllYXJzIHdpdGggbG9zc2VzXG5wcmludChwYXN0ZShkZl9sb3NzJGZ5ZWFyLCBkZl9sb3NzJGNvbm0sIGRmX2xvc3MkbmkpKSAgIyBUaGlzIGxpbmUgaXMgZmluaXNoZWQgYWxyZWFkeVxuXG4jRU5EIiwic2N0IjoidGVzdF9leHByZXNzaW9uX291dHB1dChcInN1bShkZl9qcG0kbmkpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IG1ha2Ugc3VyZSB0byBvbmx5IGluY2x1ZGUgYWxsIEpQTW9yZ2FuIGRhdGEgaW4gYGRmX2pwbWA/XCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwic3VtKGRmX21pZHllYXJzJG5pKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBtYWtlIHN1cmUgdG8gcmVtb3ZlIGJvdGggZWFybHkgYW5kIGxhdGUgeWVhcnMgZm9yIGBkZl9taWR5ZWFyc2A/XCIpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwic3VtKGRmX2xvc3MkbmkpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IGZpbHRlciBvbiBgbmlgIGZvciBgZGZfbG9zc2A/XCIpXG5cblxuIyBUZW1wbGF0ZSBiYXNlZCBvbiBodHRwczovL3d3dy5yZG9jdW1lbnRhdGlvbi5vcmcvcGFja2FnZXMvdGVzdHdoYXQvdmVyc2lvbnMvNC4xLjFcbiMgQ2hlY2sgaWYgc29tZXRoaW5nIGlzIGV4cGxpY2l0bHkgdHlwZWRcbiMgdGVzdF9zdHVkZW50X3R5cGVkKCd4IDwtIDInLCBub3RfdHlwZWRfbXNnPScnKVxuXG4jIENoZWNrIGlmIGZ1bmN0aW9uIHdhcyB1c2VkIGluIGlucHV0IGNvZGVcbiMgdGVzdF9mdW5jdGlvbignYycsaW5jb3JyZWN0X21zZz0nJykgIFxuXG4jIFJlcXVpcmVzIGFuIG9iamVjdCBgeGAgdG8gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgc29sdXRpb25cbiMgdGVzdF9vYmplY3QoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIsdW5kZWZpbmVkX21zZyA9IFwiXCIpICBcblxuIyBSZXF1aXJlcyBhbiBvbmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiBgeGAgaW4gdGhlIHNvbHV0aW9uXG4jIHRlc3RfYW5fb2JqZWN0KFwieFwiLHVuZGVmaW5lZF9tc2c9XCJcIilcblxuIyBDaGVja3MgaWYgb3V0cHV0IG9mIHN0dWRlbnQncyBjb2RlIGNvbnRhaW5zIGdpdmVuIGV2YWx1YXRlZCBleHByZXNzaW9uXG4jIHRlc3Rfb3V0cHV0X2NvbnRhaW5zKFwieFwiLGluY29ycmVjdF9tc2cgPSBcIlwiKVxuXG4jIENoZWNrIGlmIGEgdmVjdG9yIG9mIHByZWRlZmluZWQgb2JqZWN0cyBhcmUgdW5jaGFuZ2VkXG4jIHRlc3RfcHJlZGVmaW5lZF9vYmplY3RzKGMoJ3gnLCd5JyksaW5jb3JyZWN0X21zZz1cIkRvbid0IG9udmVyd3JpdGUgdGhlIHByZWRlZmluZWQgdmFyaWFibGVzXCIpXG5cbiMgQ2hlY2tzIGZvciBhIHJlZ2V4IHBhdHRlcm4gaW4gdHJoZSBvdXRwdXRcbiMgdGVzdF9vdXRwdXRfcmVnZXgocGF0dGVybixmaXhlZD1GLCB0aW1lcz0xLCBpbmNvcnJlY3RfbXNnPScnKVxuXG4jIENhbiBjaGVjayBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBhY3Jvc3MgYm90aCBzb2x1dGlvbiBhbmQgc3R1ZGVudCBjb2RlXG4jIHRlc3RfZXhwcmVzc2lvbl9vdXRwdXQoXCJ0eXBlb2YoY29tcGFueV9uYW1lKVwiLCBpbmNvcnJlY3RfbXNnPVwiRGlkIHlvdSBzdG9yZSB0ZXh0dWFsIGRhdGEgaW4gYGNvbXBhbnlfbmFtZWA/XCIpXG5cbnRlc3RfZXJyb3IoKVxuc3VjY2Vzc19tc2coXCJBd2Vzb21lIVwiKVxuXG4jIE90aGVyIGZ1bmN0aW9ucyB0byBub3RlOlxuIyAgICAgLSB0ZXN0X29yKGEsYikgLS0gY2hlY2tzIGlmIGVpdGhlciB0ZXN0IGEgb3IgdGVzdCBiIHBhc3NcbiMgICAgIC0gdGVzdF9nZ3Bsb3QoKSAtLSBjYW4gY2hlY2sgaWYgcGxvdHMgYXJlIGNvcnJlY3RcbiMgICAgIC0gdGVzdF9mdW5jdGlvbigpIC0tIGNhbiBhbHNvIGNoZWNrIGluY2x1ZGVkIHBhcmFtZXRlcnNcbiMgICAgIC0gdGVzdF9sb29wKCkgLS0gY2hlY2tpbmcgZm9yIGFuZCB3aGlsZSBsb29wc1xuIyAgICAgLSB0ZXN0X2xpYnJhcnlfZnVuY3Rpb24oJ3BhY2thZ2UnLCBub3RfY2FsbGVkX21zZz0nJyxpbmNvcnJlY3RfbXNnPScnKVxuIyAgICAgLSB0ZXN0X2lmX2Vsc2UoKSAtLSBjaGVja2luZyBpZiBzdGF0ZW1lbnRzXG4jICAgICAtIHRlc3RfZXhwcmVzc2lvbl9lcnJvcigpIC0tIGNhbiBjaGVjayBpZiBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IGRlZmluZWRcbiMgICAgIC0gdGVzdF9vcGVyYXRvcignb3BlcmF0b3InLCksIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfZnVuY3Rpb25fZGVmaW5pdGlvbigpIC0tIHJpZ29yb3VzbHkgY2hlY2sgZGVmaW5lZCBmdW5jdGlvblxuIyAgICAgLSB0ZXN0X2RhdGFfZnJhbWUoKSAtLSBjaGVjayBpZiBkYXRhZnJhbWUgW2NvbHVtbnNdIGFyZSBlcXVpdmFsZW50XG4jICAgICAtIHRlc3RfZnVuY3Rpb25fcmVzdWx0LCB0ZXN0X2V4cHJlc3Npb25fcmVzdWx0In0=

Exercise 6: External library usage

Click the expand button to see the plot more clearly (note: may be blocked by pop-up blockers)

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSIsInNhbXBsZSI6IiMgZGYgaXMgdGhlIHNhbWUgZGF0YWZyYW1lIGZyb20gRXhlcmNpc2UgIzRcblxuIyBUbyB1c2UgeHlwbG90IGJlbG93LCB3ZSBuZWVkIHRvIGxvYWQgdGhlIFwibGF0dGljZVwiIHBhY2thZ2VcbiMgTG9hZCB0aGUgcGFja2FnZSBoZXJlXG5cblxuIyBQbG90cyB0aGUgdGhyZWUgYmFua3MnIG5ldCBpbmNvbWUgYnkgZmlzY2FsIHllYXJcbiMgVHJ5IGNoYW5naW5nIHRoZSB2YXJpYWJsZXMgYW5kIGV4cGxvcmUgdGhlIGRhdGEhXG54eXBsb3Qobml+ZnllYXIgfCB0aWMsIGRhdGE9ZGYsIHR5cGU9XCJsXCIpICMgVGhpcyBjb2RlIGlzIGNvbXBsZXRlIGFscmVhZHlcblxuI0VORCIsInNvbHV0aW9uIjoiIyBkZiBpcyB0aGUgc2FtZSBkYXRhZnJhbWUgZnJvbSBFeGVyY2lzZSAjNFxuXG4jIFRvIHVzZSB4eXBsb3QgYmVsb3csIHdlIG5lZWQgdG8gbG9hZCB0aGUgXCJsYXR0aWNlXCIgcGFja2FnZVxuIyBMb2FkIHRoZSBwYWNrYWdlIGhlcmVcbmxpYnJhcnkobGF0dGljZSlcblxuIyBQbG90cyB0aGUgdGhyZWUgYmFua3MnIG5ldCBpbmNvbWUgYnkgZmlzY2FsIHllYXJcbiMgVHJ5IGNoYW5naW5nIHRoZSB2YXJpYWJsZXMgYW5kIGV4cGxvcmUgdGhlIGRhdGEhXG54eXBsb3Qobml+ZnllYXIgfCB0aWMsIGRhdGE9ZGYsIHR5cGU9XCJsXCIpICMgVGhpcyBjb2RlIGlzIGNvbXBsZXRlIGFscmVhZHlcblxuI0VORCIsInNjdCI6InRlc3RfZnVuY3Rpb24oJ2xpYnJhcnknLGluY29ycmVjdF9tc2c9J1VzZSBsaWJyYXJ5IHRvIGxvYWQgdGhlIGBsYXR0aWNlYCBwYWNrYWdlLicpXG50ZXN0X3N0dWRlbnRfdHlwZWQoJ2xpYnJhcnkobGF0dGljZSknLCBub3RfdHlwZWRfbXNnPSdNYWtlIHN1cmUgeW91IGxvYWQgdGhlIGBsYXR0aWNlYCBwYWNrYWdlIScpXG5cbiMgVGVtcGxhdGUgYmFzZWQgb24gaHR0cHM6Ly93d3cucmRvY3VtZW50YXRpb24ub3JnL3BhY2thZ2VzL3Rlc3R3aGF0L3ZlcnNpb25zLzQuMS4xXG4jIENoZWNrIGlmIHNvbWV0aGluZyBpcyBleHBsaWNpdGx5IHR5cGVkXG4jIHRlc3Rfc3R1ZGVudF90eXBlZCgnbGlicmFyeShsYXR0aWNlKScsIG5vdF90eXBlZF9tc2c9J01ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgcGFja2FnZScpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuIyB0ZXN0X2Z1bmN0aW9uKCdjJyxpbmNvcnJlY3RfbXNnPScnKSAgXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuIyB0ZXN0X29iamVjdChcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIix1bmRlZmluZWRfbXNnID0gXCJcIikgIFxuXG4jIFJlcXVpcmVzIGFuIG9uamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIGB4YCBpbiB0aGUgc29sdXRpb25cbiMgdGVzdF9hbl9vYmplY3QoXCJ4XCIsdW5kZWZpbmVkX21zZz1cIlwiKVxuXG4jIENoZWNrcyBpZiBvdXRwdXQgb2Ygc3R1ZGVudCdzIGNvZGUgY29udGFpbnMgZ2l2ZW4gZXZhbHVhdGVkIGV4cHJlc3Npb25cbiMgdGVzdF9vdXRwdXRfY29udGFpbnMoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbiMgdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==

Exercise 7: Making your own function

eyJsYW5ndWFnZSI6InIiLCJwcmVfZXhlcmNpc2VfY29kZSI6ImRmIDwtIHJlYWQuY3N2KHRleHQ9XCJndmtleSxkYXRhZGF0ZSxmeWVhcix0aWMsY29ubSxhdCxkcHRjLGx0LG5pXG4zMjQzLDIwMTAxMjMxLDIwMTAsQyxDSVRJR1JPVVAgSU5DLDE5MTM5MDIsODQ0OTY4LDE3NDgxMTMsMTA2MDJcbjMyNDMsMjAxMTEyMzEsMjAxMSxDLENJVElHUk9VUCBJTkMsMTg3Mzg3OCw4NjU5MzYsMTY5NDMwNSwxMTA2N1xuMzI0MywyMDEyMTIzMSwyMDEyLEMsQ0lUSUdST1VQIElOQywxODY0NjYwLDkzMDU2MCwxNjczNjYzLDc1NDFcbjMyNDMsMjAxMzEyMzEsMjAxMyxDLENJVElHUk9VUCBJTkMsMTg4MDM4Miw5NjgyNzMsMTY3NDI0OSwxMzY3M1xuMzI0MywyMDE0MTIzMSwyMDE0LEMsQ0lUSUdST1VQIElOQywxODQyNTMwLDg5OTMzMiwxNjMwNDg1LDczMTNcbjMyNDMsMjAxNTEyMzEsMjAxNSxDLENJVElHUk9VUCBJTkMsMTczMTIxMCw5MDc4ODcsMTUwODExOCwxNzI0MlxuMzI0MywyMDE2MTIzMSwyMDE2LEMsQ0lUSUdST1VQIElOQywxNzkyMDc3LDkyOTQwNiwxNTY1OTM0LDE0OTEyXG4zMjQzLDIwMTcxMjMxLDIwMTcsQyxDSVRJR1JPVVAgSU5DLDE4NDI0NjUsOTU5ODIyLDE2NDA3OTMsLTY3OThcbjExNDYyOCwyMDEwMTIzMSwyMDEwLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTMzMiwzODU2OSw4MzMxMDQsODM1NFxuMTE0NjI4LDIwMTExMjMxLDIwMTEsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsOTIzMjI1LDQ2MTA5LDg1MTM5Niw0NDQyXG4xMTQ2MjgsMjAxMjEyMzEsMjAxMixHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw5Mzg1NTUsNzAxMjQsODYyMzMxLDc0NzVcbjExNDYyOCwyMDEzMTIzMSwyMDEzLEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxMTUwNyw3MDgwNyw4MzI3MTQsODA0MFxuMTE0NjI4LDIwMTQxMjMxLDIwMTQsR1MsR09MRE1BTiBTQUNIUyBHUk9VUCBJTkMsODU2MjQwLDgzMDA4LDc3MzAzOSw4NDc3XG4xMTQ2MjgsMjAxNTEyMzEsMjAxNSxHUyxHT0xETUFOIFNBQ0hTIEdST1VQIElOQyw4NjEzOTUsOTc1MTksNzc0MjA4LDYwODNcbjExNDYyOCwyMDE2MTIzMSwyMDE2LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDg2MDE2NSwxMjQwOTgsNzcyNzY2LDczOThcbjExNDYyOCwyMDE3MTIzMSwyMDE3LEdTLEdPTERNQU4gU0FDSFMgR1JPVVAgSU5DLDkxNjc3NiwxMzg2MDQsODMzOTgwLDQyODZcbjI5NjgsMjAxMDEyMzEsMjAxMCxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMTE3NjA1LDkzMDM2OSwxOTQxNDk5LDE3MzcwXG4yOTY4LDIwMTExMjMxLDIwMTEsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjI2NTc5MiwxMTI3ODA2LDIwODIyMTksMTg5NzZcbjI5NjgsMjAxMjEyMzEsMjAxMixKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzU5MTQxLDExOTM1OTMsMjE1NTA3MiwyMTI4NFxuMjk2OCwyMDEzMTIzMSwyMDEzLEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0MTU2ODksMTI4Nzc2NSwyMjA0NTExLDE3OTIzXG4yOTY4LDIwMTQxMjMxLDIwMTQsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjU3MzEyNiwxMzYzNDI3LDIzNDEwNjEsMjE3NjJcbjI5NjgsMjAxNTEyMzEsMjAxNSxKUE0sSlBNT1JHQU4gQ0hBU0UgJiBDTywyMzUxNjk4LDEyNzk3MTUsMjEwNDEyNSwyNDQ0MlxuMjk2OCwyMDE2MTIzMSwyMDE2LEpQTSxKUE1PUkdBTiBDSEFTRSAmIENPLDI0OTA5NzIsMTM3NTE3OSwyMjM2NzgyLDI0NzMzXG4yOTY4LDIwMTcxMjMxLDIwMTcsSlBNLEpQTU9SR0FOIENIQVNFICYgQ08sMjUzMzYwMCwxNDQzOTgyLDIyNzc5MDcsMjQ0NDFcblwiLCBzdHJpbmdzQXNGYWN0b3JzPUZBTFNFKSIsInNhbXBsZSI6IiMgRGVzaWduaW5nIGEgZnVuY3Rpb24gKHVzaW5nIGZ1bmN0aW9uKCkpIHRoYXQgY29udmVydHMgVVNEIHRvIFNHRFxuIyBBc3N1bWUgdGhhdCB0aGUgZXhjYWhuZ2UgcmF0ZSBpcyAxLjM2XG4jIE5PVEU6IHdlIGNvdWxkIGFjdHVhbGx5IHB1bGwgdGhlIGV4Y2hhbmdlIHJhdGUgZnJvbSB0aGUgd2ViLCBidXQgZGF0YWNhbXAgZG9lc24ndCBzdXBwb3J0XG4jICAgICAgIHN1Y2ggYSBmdW5jdGlvbi4gIFNlZSB0aGUgc2xpZGUgZW5kIG5vdGVzIGZvciBhbiBleGFtcGxlIHRoYXQgZG9lcyB0aGlzIVxuXG5jb252ZXJ0X2N1cnJlbmN5IDwtIFxuXG4jIE5vdywgbGV0J3MgdGVzdCB0aGUgZnVuY3Rpb24geW91IGNyZWF0ZWRcbiMgQ2hlY2sgdGhlIHByaWNlIG9mIDEgVVNEIGluIFNHRFxuY29udmVydF9jdXJyZW5jeSgxKVxuXG4jIENoZWNrIHRoZSBoaWdoZXN0IGFtb3VudCBvZiBhc3NldHMgb2YgYW55IG9mIG91ciAzIGJhbmtzLCBpbiBTR0Rcbm1heChjb252ZXJ0X2N1cnJlbmN5KGRmJGF0KSlcblxuI0VORCIsInNvbHV0aW9uIjoiIyBEZXNpZ25pbmcgYSBmdW5jdGlvbiAodXNpbmcgZnVuY3Rpb24oKSkgdGhhdCBjb252ZXJ0cyBVU0QgdG8gU0dEXG4jIEFzc3VtZSB0aGF0IHRoZSBleGNhaG5nZSByYXRlIGlzIDEuMzZcbiMgTk9URTogd2UgY291bGQgYWN0dWFsbHkgcHVsbCB0aGUgZXhjaGFuZ2UgcmF0ZSBmcm9tIHRoZSB3ZWIsIGJ1dCBEYXRhY2FtcCBkb2Vzbid0IHN1cHBvcnRcbiMgICAgICAgc3VjaCBhIGZ1bmN0aW9uLiAgU2VlIHRoZSBzbGlkZSBlbmQgbm90ZXMgZm9yIGFuIGV4YW1wbGUgdGhhdCBkb2VzIHRoaXMhXG5cbmNvbnZlcnRfY3VycmVuY3kgPC0gZnVuY3Rpb24oYW1vdW50KSB7XG4gIGFtb3VudCAqIDEuMzZcbn1cblxuIyBOb3csIGxldCdzIHRlc3QgdGhlIGZ1bmN0aW9uIHlvdSBjcmVhdGVkXG4jIENoZWNrIHRoZSBwcmljZSBvZiAxIFVTRCBpbiBTR0RcbmNvbnZlcnRfY3VycmVuY3koMSlcblxuIyBDaGVjayB0aGUgaGlnaGVzdCBhbW91bnQgb2YgYXNzZXRzIG9mIGFueSBvZiBvdXIgMyBiYW5rcywgaW4gU0dEXG5tYXgoY29udmVydF9jdXJyZW5jeShkZiRhdCkpXG5cbiNFTkQiLCJzY3QiOiJ0ZXN0X3N0dWRlbnRfdHlwZWQoJyoxLjM2Jywgbm90X3R5cGVkX21zZz0nRGlkIHlvdSB1c2UgYW4gZXhjaGFuZ2UgcmF0ZSBvZiAxLjM2PycpXG50ZXN0X2V4cHJlc3Npb25fb3V0cHV0KFwiY29udmVydF9jdXJyZW5jeSgxKVwiLCBpbmNvcnJlY3RfbXNnPVwiSXQgYXBwZWFycyB0aGF0IHlvdXIgY3VycmVuY3kgY29udmVydGVyIGlzIG5vdCBjb3JyZWN0LlwiKVxuXG4jIFRlbXBsYXRlIGJhc2VkIG9uIGh0dHBzOi8vd3d3LnJkb2N1bWVudGF0aW9uLm9yZy9wYWNrYWdlcy90ZXN0d2hhdC92ZXJzaW9ucy80LjEuMVxuIyBDaGVjayBpZiBzb21ldGhpbmcgaXMgZXhwbGljaXRseSB0eXBlZFxuIyB0ZXN0X3N0dWRlbnRfdHlwZWQoJ3ggPC0gMicsIG5vdF90eXBlZF9tc2c9JycpXG5cbiMgQ2hlY2sgaWYgZnVuY3Rpb24gd2FzIHVzZWQgaW4gaW5wdXQgY29kZVxuIyB0ZXN0X2Z1bmN0aW9uKCdjJyxpbmNvcnJlY3RfbXNnPScnKSAgXG5cbiMgUmVxdWlyZXMgYW4gb2JqZWN0IGB4YCB0byBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBzb2x1dGlvblxuIyB0ZXN0X29iamVjdChcInhcIixpbmNvcnJlY3RfbXNnID0gXCJcIix1bmRlZmluZWRfbXNnID0gXCJcIikgIFxuXG4jIFJlcXVpcmVzIGFuIG9uamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIGB4YCBpbiB0aGUgc29sdXRpb25cbiMgdGVzdF9hbl9vYmplY3QoXCJ4XCIsdW5kZWZpbmVkX21zZz1cIlwiKVxuXG4jIENoZWNrcyBpZiBvdXRwdXQgb2Ygc3R1ZGVudCdzIGNvZGUgY29udGFpbnMgZ2l2ZW4gZXZhbHVhdGVkIGV4cHJlc3Npb25cbiMgdGVzdF9vdXRwdXRfY29udGFpbnMoXCJ4XCIsaW5jb3JyZWN0X21zZyA9IFwiXCIpXG5cbiMgQ2hlY2sgaWYgYSB2ZWN0b3Igb2YgcHJlZGVmaW5lZCBvYmplY3RzIGFyZSB1bmNoYW5nZWRcbiMgdGVzdF9wcmVkZWZpbmVkX29iamVjdHMoYygneCcsJ3knKSxpbmNvcnJlY3RfbXNnPVwiRG9uJ3Qgb252ZXJ3cml0ZSB0aGUgcHJlZGVmaW5lZCB2YXJpYWJsZXNcIilcblxuIyBDaGVja3MgZm9yIGEgcmVnZXggcGF0dGVybiBpbiB0cmhlIG91dHB1dFxuIyB0ZXN0X291dHB1dF9yZWdleChwYXR0ZXJuLGZpeGVkPUYsIHRpbWVzPTEsIGluY29ycmVjdF9tc2c9JycpXG5cbiMgQ2FuIGNoZWNrIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGFjcm9zcyBib3RoIHNvbHV0aW9uIGFuZCBzdHVkZW50IGNvZGVcbiMgdGVzdF9leHByZXNzaW9uX291dHB1dChcInR5cGVvZihjb21wYW55X25hbWUpXCIsIGluY29ycmVjdF9tc2c9XCJEaWQgeW91IHN0b3JlIHRleHR1YWwgZGF0YSBpbiBgY29tcGFueV9uYW1lYD9cIilcblxudGVzdF9lcnJvcigpXG5zdWNjZXNzX21zZyhcIkF3ZXNvbWUhXCIpXG5cbiMgT3RoZXIgZnVuY3Rpb25zIHRvIG5vdGU6XG4jICAgICAtIHRlc3Rfb3IoYSxiKSAtLSBjaGVja3MgaWYgZWl0aGVyIHRlc3QgYSBvciB0ZXN0IGIgcGFzc1xuIyAgICAgLSB0ZXN0X2dncGxvdCgpIC0tIGNhbiBjaGVjayBpZiBwbG90cyBhcmUgY29ycmVjdFxuIyAgICAgLSB0ZXN0X2Z1bmN0aW9uKCkgLS0gY2FuIGFsc28gY2hlY2sgaW5jbHVkZWQgcGFyYW1ldGVyc1xuIyAgICAgLSB0ZXN0X2xvb3AoKSAtLSBjaGVja2luZyBmb3IgYW5kIHdoaWxlIGxvb3BzXG4jICAgICAtIHRlc3RfbGlicmFyeV9mdW5jdGlvbigncGFja2FnZScsIG5vdF9jYWxsZWRfbXNnPScnLGluY29ycmVjdF9tc2c9JycpXG4jICAgICAtIHRlc3RfaWZfZWxzZSgpIC0tIGNoZWNraW5nIGlmIHN0YXRlbWVudHNcbiMgICAgIC0gdGVzdF9leHByZXNzaW9uX2Vycm9yKCkgLS0gY2FuIGNoZWNrIGlmIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgZGVmaW5lZFxuIyAgICAgLSB0ZXN0X29wZXJhdG9yKCdvcGVyYXRvcicsKSwgbm90X2NhbGxlZF9tc2c9JycsaW5jb3JyZWN0X21zZz0nJylcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9kZWZpbml0aW9uKCkgLS0gcmlnb3JvdXNseSBjaGVjayBkZWZpbmVkIGZ1bmN0aW9uXG4jICAgICAtIHRlc3RfZGF0YV9mcmFtZSgpIC0tIGNoZWNrIGlmIGRhdGFmcmFtZSBbY29sdW1uc10gYXJlIGVxdWl2YWxlbnRcbiMgICAgIC0gdGVzdF9mdW5jdGlvbl9yZXN1bHQsIHRlc3RfZXhwcmVzc2lvbl9yZXN1bHQifQ==