#include <stdio.h>
#include <stdlib.h>
#define MAX 21
#define MAX_ELEM 8
#define SCORE 12
#define NUM_SKATER 4
#define BASE 3.1
typedef struct{
char name[MAX];
int elements;
float baseval[MAX_ELEM];
int score[MAX_ELEM][SCORE];
float total_base;
float tech_score;
float total_score;
}SKATER;
int getData(SKATER skater[NUM_SKATER]);
void calcData(SKATER skater[NUM_SKATER]);
void insertSort(SKATER skater[NUM_SKATER], int num);
void printData(SKATER skater[]);
int main (void)
{
// Global Declarations
SKATER skater[NUM_SKATER];
int num;
// Funtion calls
num = getData(skater);
calcData(skater);
insertSort(skater, NUM_SKATER);
printData(skater);
return 0;
}
/********************************* getData ************************************
Pre:
Post:
*/
int getData(SKATER skater[NUM_SKATER])
{
// LOcal Declarations
FILE* fpIn;
int i = 0;
int k;
int j;
char buffer[256];
// Statements
if((fpIn
= fopen("lab6data.txt","r"))==NULL
) {
}
while(i
< NUM_SKATER
&& fgets(buffer
, sizeof(buffer
), fpIn
)) {
sscanf(buffer
,"%20[^\n]", skater
[i
].
name); for(k = 0; k < MAX_ELEM; k++)
{
if(fgets(buffer
, sizeof(buffer
), fpIn
) != NULL
) {
char *p=buffer;
int n=0;
if(2!=sscanf(p
+=n
,"%d%f%n",&skater
[i
].
elements, &skater
[i
].
baseval[k
],&n
)) for(j = 0; j < SCORE; j++)
{
if( 1!=sscanf(p
+=n
,"%d%n", &skater
[i
].
score[k
][j
],&n
) ) }
}
}
i++;
}
return i;
}
/* ****************************** calcData *******************************
Pre:
Post:
*/
void calcData(SKATER skater[NUM_SKATER])
{
//Local Declaration
int i,j,k;
int smallest, largest;
int temp = 0;
float temp_baseval = 0;
float temp_score = 0;
float total;
//Statements
for(i=0; i< NUM_SKATER; i++)
{
for(j=0; j< MAX_ELEM; j++)
{
smallest = skater[i].score[j][0];
largest = skater[i].score[j][SCORE-1];
for(k=0; k< SCORE; k++)
{
temp += skater[i].score[j][k]; //adds total scores
if(smallest > skater[i].score[j][k])
smallest = skater[i].score[j][k];
else if(largest < skater[i].score[j][k])
largest = skater[i].score[j][k];
}
//total scores minus largest and smallest
total = (float)(temp - (largest+smallest)) / (float)SCORE;
temp = 0;
//calculates result on the basis of baseval <= or > than 3.1
if(skater[i].baseval[j] <= BASE)
skater[i].total_score = (float)(.5 * total) + skater[i].baseval[j];
else
skater[i].total_score = total + skater[i].baseval[j];
temp_baseval += skater[i].baseval[j]; //sums up baseval
temp_score += skater[i].total_score; //sums up technical score
}
skater[i].tech_score = temp_score;
skater[i].total_base = temp_baseval;
temp_baseval=0;
temp_score=0;
}
return;
}
/* ==================== insertSort ====================
Sorts list using Insertion Sort. Thes list is divided into sorted
and unsorted list. With each pass the first elemnt in unsorted list
is inserted in sortedlist.
Pre SKATER skater is a structure
Post returns sorted structure based on highest technical score
*/
void insertSort(SKATER skater[NUM_SKATER], int num)
{
//Local Declaration
int loc;
SKATER temp;
SKATER *pCurr;
SKATER *pWalk;
SKATER *pLast;
//Statements
for(pCurr = skater + 1, pLast = skater + num-1;
pCurr <= pLast;
pCurr++)
{
loc = 0;
temp = *pCurr;
for(pWalk = pCurr -1;
pWalk >= skater && !loc;)
//compares the tech scores of swimmers
if(temp.tech_score > pWalk->tech_score)
{
*(pWalk+1) = *pWalk;
pWalk--;
}
else
loc = 1;
*(pWalk+1) = temp;
}
return;
}
/* ****************************** printData *******************************8
Pre:
Post:
*/
void printData(SKATER skater[])
{
//Local Declaration
FILE*fpOut;
int i,j,k;
//Statements
if(!(fpOut
=fopen("output.txt", "w"))) printf("CANT OPENT output.txt");
printf("DONE see output.txt\n"); //checks to see if output.txt opens
fprintf(fpOut
,"NAME: LAB#6 EMAIL: \n\n"); fprintf(fpOut
,"EVENT: MEN SHORT PROGRAM\n"); fprintf(fpOut
,"CHIEF ACCOUNTANT: \n\n");
for(i=0; i<NUM_SKATER; i++)
{
fprintf(fpOut
,"SKATER: %s\n\n", skater
[i
].
name); fprintf(fpOut
,"[BASE] [SCORE] [TOTAL]\n"); fprintf(fpOut
,"---------------------------------------------------------------\n"); for(j=0; j<MAX_ELEM; j++)
{
fprintf(fpOut
,"%5.2f ", skater
[i
].
baseval[j
]); for(k=0; k<SCORE; k++)
{
fprintf(fpOut
,"%3d ", skater
[i
].
score[j
][k
]); }
fprintf(fpOut
," %5.2f", skater
[i
].
total_score); }
fprintf(fpOut
,"---------------------------------------------------------------\n"); fprintf(fpOut
,"Total Base: %5.2f Total Technical Score: %5.2f", skater[i].total_base, skater[i].tech_score);
}
return;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIAojZGVmaW5lIE1BWCAyMQojZGVmaW5lIE1BWF9FTEVNIDgKI2RlZmluZSBTQ09SRSAxMgojZGVmaW5lIE5VTV9TS0FURVIgNAojZGVmaW5lIEJBU0UgMy4xCiAKdHlwZWRlZiBzdHJ1Y3R7CiAgICAgICAgICAgICAgICBjaGFyICBuYW1lW01BWF07CiAgICAgICAgICAgICAgICBpbnQgICBlbGVtZW50czsKICAgICAgICAgICAgICAgIGZsb2F0IGJhc2V2YWxbTUFYX0VMRU1dOwogICAgICAgICAgICAgICAgaW50IHNjb3JlW01BWF9FTEVNXVtTQ09SRV07CiAgICAgICAgICAgICAgICBmbG9hdCB0b3RhbF9iYXNlOwogICAgICAgICAgICAgICAgZmxvYXQgdGVjaF9zY29yZTsKICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsX3Njb3JlOwogICAgICAgICAgICAgIH1TS0FURVI7CiAKaW50ICBnZXREYXRhKFNLQVRFUiBza2F0ZXJbTlVNX1NLQVRFUl0pOwp2b2lkIGNhbGNEYXRhKFNLQVRFUiBza2F0ZXJbTlVNX1NLQVRFUl0pOwp2b2lkIGluc2VydFNvcnQoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSwgaW50IG51bSk7CnZvaWQgcHJpbnREYXRhKFNLQVRFUiBza2F0ZXJbXSk7CiAKaW50IG1haW4gKHZvaWQpCnsKICAgICAgICAvLyBHbG9iYWwgRGVjbGFyYXRpb25zCiAgICAgICAgU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXTsKICAgICAgICBpbnQgbnVtOwogCiAgICAgICAgLy8gRnVudGlvbiBjYWxscwogICAgICAgIG51bSA9IGdldERhdGEoc2thdGVyKTsKICAgICAgICBjYWxjRGF0YShza2F0ZXIpOwogICAgICAgIGluc2VydFNvcnQoc2thdGVyLCBOVU1fU0tBVEVSKTsKICAgICAgICBwcmludERhdGEoc2thdGVyKTsKICAgICAgICByZXR1cm4gMDsKfQogCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogZ2V0RGF0YSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKUHJlOgpQb3N0OgoqLwppbnQgZ2V0RGF0YShTS0FURVIgc2thdGVyW05VTV9TS0FURVJdKQp7CiAgICAgICAgLy8gTE9jYWwgRGVjbGFyYXRpb25zCiAgICAgICAgRklMRSogZnBJbjsKICAgICAgICBpbnQgICBpID0gMDsgIAogICAgICAgIGludCAgICAgICBrOwogICAgICAgIGludCAgIGo7CiAgICAgICAgY2hhciAgYnVmZmVyWzI1Nl07IAogCiAgICAgICAgLy8gU3RhdGVtZW50cwogICAgICAgIGlmKChmcEluID0gZm9wZW4oImxhYjZkYXRhLnR4dCIsInIiKSk9PU5VTEwpCiAgICAgICAgewogICAgICAgICAgICAgICAgcHJpbnRmKCJGaWxlIG9wZW5pbmcgZXJyb3IiKTsKICAgICAgICAgICAgICAgIHN5c3RlbSgiUEFVU0UiKTsKICAgICAgICAgICAgICAgIGV4aXQoMTAwKTsKICAgICAgICB9CiAgICAgCiAgICAgIHdoaWxlKGkgPCBOVU1fU0tBVEVSICYmIGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwSW4pKQoJICB7ICAgICAgICAgICAgIAoJCQkgc3NjYW5mKGJ1ZmZlciwiJTIwW15cbl0iLCBza2F0ZXJbaV0ubmFtZSk7ICAgICAgICAgICAgICAgICAKCQkJIGZvcihrID0gMDsgayA8IE1BWF9FTEVNOyBrKyspCgkJCSB7ICAgICAgICAgICAgICAgICAgICAgCgkJCQlpZihmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBmcEluKSAhPSBOVUxMKQoJCQkJewoJCQkJCWNoYXIgKnA9YnVmZmVyOwoJCQkJCWludCBuPTA7ICAgICAgICAgICAgICAgICAgCgkJCQkJaWYoMiE9c3NjYW5mKHArPW4sIiVkJWYlbiIsJnNrYXRlcltpXS5lbGVtZW50cywgJnNrYXRlcltpXS5iYXNldmFsW2tdLCZuKSkgCgkJCQkJCWV4aXQoMSk7CgkJCQkJZm9yKGogPSAwOyBqIDwgU0NPUkU7IGorKykKCQkJCQl7CgkJCQkJCWlmKCAxIT1zc2NhbmYocCs9biwiJWQlbiIsICZza2F0ZXJbaV0uc2NvcmVba11bal0sJm4pICkKCQkJCQkJZXhpdCgxKTsKCQkJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGkrKzsgICAgICAgICAgCiAgICAgICAgICAgICB9CiAKICAgICAgICBzeXN0ZW0oIlBBVVNFIik7CiAgICAgICAgZmNsb3NlKGZwSW4pOwogCiAgICAgICAgcmV0dXJuIGk7Cn0KIAovKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogY2FsY0RhdGEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpQcmU6ClBvc3Q6CiovCnZvaWQgY2FsY0RhdGEoU0tBVEVSIHNrYXRlcltOVU1fU0tBVEVSXSkKewogICAgICAgIC8vTG9jYWwgRGVjbGFyYXRpb24gCiAgICAgICAgaW50IGksaixrOwogICAgICAgIGludCBzbWFsbGVzdCwgbGFyZ2VzdDsKICAgICAgICBpbnQgdGVtcCA9IDA7CiAgICAgICAgZmxvYXQgdGVtcF9iYXNldmFsID0gMDsKICAgICAgICBmbG9hdCB0ZW1wX3Njb3JlID0gMDsKICAgICAgICBmbG9hdCB0b3RhbDsKIAovL1N0YXRlbWVudHMKICAgICAgICBmb3IoaT0wOyBpPCBOVU1fU0tBVEVSOyBpKyspCiAgICAgICAgeyAgICAgICAKICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8IE1BWF9FTEVNOyBqKyspCiAgICAgICAgICAgICAgICB7ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBzbWFsbGVzdCA9IHNrYXRlcltpXS5zY29yZVtqXVswXTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VzdCA9IHNrYXRlcltpXS5zY29yZVtqXVtTQ09SRS0xXTsKIAogICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0wOyBrPCBTQ09SRTsgaysrKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCArPSBza2F0ZXJbaV0uc2NvcmVbal1ba107IC8vYWRkcyB0b3RhbCBzY29yZXMKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNtYWxsZXN0ID4gc2thdGVyW2ldLnNjb3JlW2pdW2tdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxlc3QgPSBza2F0ZXJbaV0uc2NvcmVbal1ba107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihsYXJnZXN0IDwgc2thdGVyW2ldLnNjb3JlW2pdW2tdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2VzdCA9IHNrYXRlcltpXS5zY29yZVtqXVtrXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG90YWwgc2NvcmVzIG1pbnVzIGxhcmdlc3QgYW5kIHNtYWxsZXN0CiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsID0gKGZsb2F0KSh0ZW1wIC0gKGxhcmdlc3Qrc21hbGxlc3QpKSAvIChmbG9hdClTQ09SRTsgCiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgLy9jYWxjdWxhdGVzIHJlc3VsdCBvbiB0aGUgYmFzaXMgb2YgYmFzZXZhbCA8PSBvciA+IHRoYW4gMy4xCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNrYXRlcltpXS5iYXNldmFsW2pdIDw9IEJBU0UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYXRlcltpXS50b3RhbF9zY29yZSA9IChmbG9hdCkoLjUgKiB0b3RhbCkgKyBza2F0ZXJbaV0uYmFzZXZhbFtqXTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICBza2F0ZXJbaV0udG90YWxfc2NvcmUgPSB0b3RhbCArIHNrYXRlcltpXS5iYXNldmFsW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9iYXNldmFsICs9IHNrYXRlcltpXS5iYXNldmFsW2pdOyAvL3N1bXMgdXAgYmFzZXZhbAogICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX3Njb3JlICs9IHNrYXRlcltpXS50b3RhbF9zY29yZTsgLy9zdW1zIHVwIHRlY2huaWNhbCBzY29yZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBza2F0ZXJbaV0udGVjaF9zY29yZSA9IHRlbXBfc2NvcmU7CiAgICAgICAgICAgICAgICBza2F0ZXJbaV0udG90YWxfYmFzZSA9IHRlbXBfYmFzZXZhbDsKIAogICAgICAgICAgICAgICAgdGVtcF9iYXNldmFsPTA7CiAgICAgICAgICAgICAgICB0ZW1wX3Njb3JlPTA7CiAgICAgICAgfQogCiAKICAgICAgICByZXR1cm47Cn0KIAovKiAgICAgID09PT09PT09PT09PT09PT09PT09IGluc2VydFNvcnQgPT09PT09PT09PT09PT09PT09PT0KICAgICAgICBTb3J0cyBsaXN0IHVzaW5nIEluc2VydGlvbiBTb3J0LiBUaGVzIGxpc3QgaXMgZGl2aWRlZCBpbnRvIHNvcnRlZCAKICAgICAgICBhbmQgdW5zb3J0ZWQgbGlzdC4gV2l0aCBlYWNoIHBhc3MgdGhlIGZpcnN0IGVsZW1udCBpbiB1bnNvcnRlZCBsaXN0CiAgICAgICAgaXMgaW5zZXJ0ZWQgaW4gc29ydGVkbGlzdC4KIAogICAgICAgICAgIFByZSAgICAgICAgICBTS0FURVIgc2thdGVyIGlzIGEgc3RydWN0dXJlCiAgICAgICAgICAgUG9zdCAgICAgICAgIHJldHVybnMgc29ydGVkIHN0cnVjdHVyZSBiYXNlZCBvbiBoaWdoZXN0IHRlY2huaWNhbCBzY29yZQoqLwogCnZvaWQgaW5zZXJ0U29ydChTS0FURVIgc2thdGVyW05VTV9TS0FURVJdLCBpbnQgbnVtKQp7CiAKLy9Mb2NhbCBEZWNsYXJhdGlvbiAKICAgICAgICBpbnQgbG9jOwogICAgICAgIFNLQVRFUiB0ZW1wOwogICAgICAgIFNLQVRFUiAqcEN1cnI7CiAgICAgICAgU0tBVEVSICpwV2FsazsKICAgICAgICBTS0FURVIgKnBMYXN0OwogCi8vU3RhdGVtZW50cwogICAgICAgIGZvcihwQ3VyciA9IHNrYXRlciArIDEsIHBMYXN0ID0gc2thdGVyICsgbnVtLTE7IAogICAgICAgICAgICAgICAgcEN1cnIgPD0gcExhc3Q7CiAgICAgICAgICAgICAgICBwQ3VycisrKQogICAgICAgIHsKICAgICAgICAgbG9jID0gMDsKICAgICAgICAgdGVtcCA9ICpwQ3VycjsKIAogICAgICAgICBmb3IocFdhbGsgPSBwQ3VyciAtMTsgCiAgICAgICAgICAgICAgICAgcFdhbGsgPj0gc2thdGVyICYmICFsb2M7KQogCiAgICAgICAgIC8vY29tcGFyZXMgdGhlIHRlY2ggc2NvcmVzIG9mIHN3aW1tZXJzCiAgICAgICAgIGlmKHRlbXAudGVjaF9zY29yZSA+IHBXYWxrLT50ZWNoX3Njb3JlKSAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAqKHBXYWxrKzEpID0gKnBXYWxrOwogICAgICAgICAgICAgICAgICAgICAgICAgcFdhbGstLTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBsb2MgPSAxOwogICAgICAgICAqKHBXYWxrKzEpID0gdGVtcDsKICAgICAgICB9CiAKICByZXR1cm47Cn0KIAovKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogcHJpbnREYXRhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio4ClByZToKUG9zdDoKKi8Kdm9pZCBwcmludERhdGEoU0tBVEVSIHNrYXRlcltdKQp7CiAgICAgICAgLy9Mb2NhbCBEZWNsYXJhdGlvbiAKICAgICAgICBGSUxFKmZwT3V0OwogICAgICAgIGludCBpLGosazsKIAogICAgICAgIC8vU3RhdGVtZW50cwogICAgICAgIGlmKCEoZnBPdXQ9Zm9wZW4oIm91dHB1dC50eHQiLCAidyIpKSkKICAgICAgICAgICAgICAgIHByaW50ZigiQ0FOVCBPUEVOVCBvdXRwdXQudHh0Iik7CiAKICAgICAgICBwcmludGYoIkNhbGN1bGF0aW5nLi4uLi5cbiIpOwogICAgICAgIHByaW50ZigiRE9ORSBzZWUgb3V0cHV0LnR4dFxuIik7IC8vY2hlY2tzIHRvIHNlZSBpZiBvdXRwdXQudHh0IG9wZW5zCiAKICAgICAgICBmcHJpbnRmKGZwT3V0LCJOQU1FOiAgICAgIExBQiM2ICAgICAgRU1BSUw6IFxuXG4iKTsKICAgICAgICBmcHJpbnRmKGZwT3V0LCJFVkVOVDogTUVOIFNIT1JUIFBST0dSQU1cbiIpOwogICAgICAgIGZwcmludGYoZnBPdXQsIkNISUVGIEFDQ09VTlRBTlQ6IFxuXG4iKTsKICAgICAgICAKIAogICAgICAgIGZvcihpPTA7IGk8TlVNX1NLQVRFUjsgaSsrKQogICAgICAgICAgIHsgICAgCiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCJTS0FURVI6ICVzXG5cbiIsIHNrYXRlcltpXS5uYW1lKTsKICAgICAgICAgICAgICAgIGZwcmludGYoZnBPdXQsIltCQVNFXSAgICAgICAgICAgICAgICAgICBbU0NPUkVdICAgICAgICAgICAgICAgICAgICAgICAgW1RPVEFMXVxuIik7CiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgICAgICAgICAgICAgZm9yKGo9MDsgajxNQVhfRUxFTTsgaisrKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCIlNS4yZiAgICIsIHNrYXRlcltpXS5iYXNldmFsW2pdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihrPTA7IGs8U0NPUkU7IGsrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcE91dCwiJTNkICIsIHNrYXRlcltpXS5zY29yZVtqXVtrXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCIgICU1LjJmIiwgc2thdGVyW2ldLnRvdGFsX3Njb3JlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmcE91dCwiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmcHJpbnRmKGZwT3V0LCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogICAgICAgICAgICAgICAgZnByaW50ZihmcE91dCwiVG90YWwgQmFzZTogJTUuMmYgICAgICAgICAgICAgICAgICBUb3RhbCBUZWNobmljYWwgU2NvcmU6ICU1LjJmIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2thdGVyW2ldLnRvdGFsX2Jhc2UsIHNrYXRlcltpXS50ZWNoX3Njb3JlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgIGZwcmludGYoZnBPdXQsIlxuXG5cbiIpOwogICAgICAgICAgIH0KICAgICAgICBmY2xvc2UoZnBPdXQpOwogICAgICAgIHJldHVybjsKfQog